前言:
衔接完成
程序码:
//
// ViewController.swift
// Dog Breed Recognition App
//
// Created by PecaJo on 2021/6/24.
import UIKit
import FirebaseStorage
import FirebaseDatabase
class ViewController: UIViewController {
@IBOutlet weak var uploadButton: UIButton!
@IBOutlet weak var libraryButton: UIButton!
@IBOutlet weak var imageview: UIImageView!
@IBOutlet weak var dogNameLabel: UILabel!
@IBOutlet weak var dogAccLabel: UILabel!
let imagePicker = UIImagePickerController()
var ref: DatabaseReference! = Database.database().reference()
var tmpBool = false
var detect = "False"
override func viewDidLoad() {
super.viewDidLoad()
self.imagePicker.delegate = self
DispatchQueue.global().async {
while(true){
sleep(1)
if self.tmpBool {
self.uploadasync()
}
}
}
}
@IBAction func clickuploadbutton(_ sender: Any) {
self.ref.child("DetectBool/Bool/").observeSingleEvent(of: .value) {
(snapshot) in
self.detect = (snapshot.value as? String)!
}
if imageview.image != nil {
if detect == "False" {
uploadFile()
ref.child("DetectBool/Bool/").setValue("True")
ref.child("dogName/Name/").setValue("")
ref.child("dogAcc/Acc/").setValue("")
tmpBool = true
}
else{
let alertController = UIAlertController(title: "图片侦测中...", message: "请稍後再试", preferredStyle: UIAlertController.Style.alert)
alertController.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
present(alertController, animated: true, completion: nil)
}
}
else{
let alertController = UIAlertController(title: "图片讯息", message: "请放入图片", preferredStyle: UIAlertController.Style.alert)
alertController.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
present(alertController, animated: true, completion: nil)
}
}
@IBAction func clicklibrarybutton(_ sender: Any) {
imagePicker.sourceType = .photoLibrary
imagePicker.allowsEditing = true
self.present(imagePicker, animated: true)
}
func uploadFile(){
let url = URL(string: "https://XXXXXXXXXXXXXXXXXXXXXX")
// Create a root reference
let storageRef = Storage.storage().reference()
// Data in memory
let imageData: Data = imageview.image!.jpegData(compressionQuality: 1.0)!
// Create a reference to the file you want to upload
let riversRef = storageRef.child("dog.jpg")
// Upload the file to the path "images/rivers.jpg"
let uploadTask = riversRef.putData(imageData, metadata: nil) { (metadata, error) in
guard let metadata = metadata else {
// Uh-oh, an error occurred!
return
}
// Metadata contains file metadata such as size, content-type.
let size = metadata.size
// You can also access to download URL after upload.
riversRef.downloadURL { (url, error) in
guard let downloadURL = url else {
// Uh-oh, an error occurred!
return
}
}
}
}
func uploadasync(){
DispatchQueue.main.async {
self.ref.child("dogName/Name/").observeSingleEvent(of: .value) {
(snapshot) in
if let name = snapshot.value as? String {
self.dogNameLabel.text = "\(name)"
}
}
self.ref.child("dogAcc/Acc/").observeSingleEvent(of: .value) {
(snapshot) in
if let acc = snapshot.value as? String {
self.dogAccLabel.text = "\(acc)"
}
}
}
}
}
<<: Shadow Element:建构新增、删除、排序集合物件的介面与功能
>>: [Day19] - Django-REST-Framework Viewsets 介绍
动态爬虫的做法主要是用在动态网页以及一些需要登入的网页,藉由自动加载指定网页,就可以获得需要加载才能...
Unity 开发 https://wolkesau.medium.com/unity-开发-7ddb...
历经了 30 天,我们总算到了这里啦~ 是时候下台一鞠躬了~ 非常可惜的在第 29 天因为工作完全...
Child Process tags: IT铁人 Context Switching 前面提到电脑会...
这篇学的有点久,一直搞不懂他的概念是怎样,经过我一番的努力,终於把他搞懂了!!希望大家看完我这篇也可...