IOS、Python自学心得30天 Day-29 连接Firebase辨识

前言:
衔接完成

程序码:

//
//  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 介绍

Day 20 : 动态爬虫-利用webdriver达到自动登入

动态爬虫的做法主要是用在动态网页以及一些需要登入的网页,藉由自动加载指定网页,就可以获得需要加载才能...

Unity 开发组别

Unity 开发 https://wolkesau.medium.com/unity-开发-7ddb...

Day-30 不完美收工

历经了 30 天,我们总算到了这里啦~ 是时候下台一鞠躬了~ 非常可惜的在第 29 天因为工作完全...

Day-21 Child Process

Child Process tags: IT铁人 Context Switching 前面提到电脑会...

[Day 23] props

这篇学的有点久,一直搞不懂他的概念是怎样,经过我一番的努力,终於把他搞懂了!!希望大家看完我这篇也可...