swift-CoreML-貓狗識別

一:我們需要在Main.storyboard中拉出來label和button和imageView

如下圖所示 :

1:在紅框的位置選取button和label和imageView

image

2:之后將imageView拖拉進(jìn)去挚歧,如下圖所示

image

3:接下來党晋,我們按照上面的方法來把button和label也放到imageView的上面褐筛,最終的效果圖如下:

image

4:然后我們?yōu)榱诉m配大多數(shù)的iphone機型刑枝,我們來給button添加限制條件

我們先給imageView添加限制條件吧松靡!

在左下角的第二個按鈕我們限制圖片的width和height分別為374和816,距離手機上部距離為40匀油,下部距離為6凑懂,左右距離為20

image

5:我們給label和button也加上這樣的限制

image
image

6:為了能夠直觀地看到button和label我們來改變這兩個控件的顏色

在background中設(shè)置它的屬性

image

7:完成之后,我們點擊那個雙圓圈按鈕切換到雙頁面虽惭,按住control鍵拖拉storyboard中的控件到代碼里面橡类,并且設(shè)置按鈕的名字。

image
image

完成了storyboard之后芽唇,在代碼端是下面這個樣式

image

二:接下來我們的操作

(1):我們把訓(xùn)練好的模型導(dǎo)入到我們的project中(拖拉到頁面右端)

image

(2):接下來我們給兩個button添加點擊事件

//當(dāng)點擊拍照時調(diào)用takephoto這個方法
camer_button.addTarget(self, action: #selector(takephoto), for: .touchUpInside)
//當(dāng)點擊從相冊中選擇的時候調(diào)用chooseImageFromLibrary這個方法
photos_button.addTarget(self, action: #selector(chooseImageFromLibrary), for: .touchUpInside)

(4):接著我們在chooseImageFromLibrary中實現(xiàn)從相冊中獲取圖片的功能

@objc func chooseImageFromLibrary(_ sender: Any) {
   //判斷是否可以打開相冊
       if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary) {
           //調(diào)用打開相冊權(quán)限的函數(shù)
           let imagePicker = UIImagePickerController()
           //設(shè)置代理
           imagePicker.delegate = self
           //設(shè)置控制器的類型---相冊
           imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
           //圖片不允許編輯
           imagePicker.allowsEditing = false
           //跳轉(zhuǎn)到控制器---相冊
           self.present(imagePicker,animated: true,completion: nil)
       }
   }

三:我們選取圖片之后顾画,開始通過我們導(dǎo)入的模型來分析選中的圖片,我們在imagePickerController這個函數(shù)中實現(xiàn)

//獲取圖片后的操作
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        //獲取圖像
        if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            display_label.text = "分析中"
            //圖片填充模式--等比例縮放圖片
            image.contentMode = .scaleToFill
            image.layer.masksToBounds = true
            //在imageView上顯示獲取到的圖片
            image.image = pickedImage
            //加載模型
            guard let model = try? VNCoreMLModel(for:ImageClassifier().model) else {
                fatalError("無法加載訓(xùn)練模型")
            }
            //創(chuàng)建一個模型請求
            let requset = VNCoreMLRequest(model: model) {
                [weak self] requesst,error in guard let results = requesst.results as? [VNClassificationObservation],
                    let topResult = results.first else {
                        fatalError("失敗")
                }
                //主線程更新UI
                DispatchQueue.main.async {
                    print(topResult)
                    //顯示識別的結(jié)果
                    self!.display_label.text = "識別的結(jié)果是:\(Int(topResult.confidence*100))%是\(topResult.identifier)"
                    //if topResult.confidence < 0.99{
                       // self!.display_label.text = "識別的結(jié)果是:\(Int(topResult.confidence*100))%是\(topResult.identifier)"
                    //}
                    //else {
                       // self!.display_label.text = "識別的結(jié)果是:非貓非狗"
                    }
                    
                }
            }
            //將獲取到的圖片轉(zhuǎn)換為CIImage類型作為參數(shù)傳遞給模型
            guard let ciImage = CIImage(image: pickedImage) else {
                fatalError("不能獲取選擇到的圖片")
            }
            //運行圖片分類識別器
            let handler = VNImageRequestHandler(ciImage: ciImage)
            DispatchQueue.global().async {
                do {
                    try handler.perform([requset])
                }
                catch {
                    print(error)
                }
            }
            
        }
        picker.dismiss(animated: true, completion: nil)
}

最后,也是最重要的事情匆笤,需要在Info.plist中加入調(diào)用相機的權(quán)限

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末研侣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炮捧,更是在濱河造成了極大的恐慌庶诡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咆课,死亡現(xiàn)場離奇詭異末誓,居然都是意外死亡,警方通過查閱死者的電腦和手機书蚪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門喇澡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人善炫,你說我怎么就攤上這事撩幽。” “怎么了箩艺?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵窜醉,是天一觀的道長。 經(jīng)常有香客問我艺谆,道長榨惰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任静汤,我火速辦了婚禮琅催,結(jié)果婚禮上居凶,老公的妹妹穿的比我還像新娘。我一直安慰自己藤抡,他們只是感情好侠碧,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缠黍,像睡著了一般弄兜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓷式,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天替饿,我揣著相機與錄音,去河邊找鬼贸典。 笑死视卢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廊驼。 我是一名探鬼主播据过,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔬充!你這毒婦竟也來了蝶俱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤饥漫,失蹤者是張志新(化名)和其女友劉穎榨呆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庸队,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡积蜻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了彻消。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竿拆。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宾尚,靈堂內(nèi)的尸體忽然破棺而出丙笋,到底是詐尸還是另有隱情,我是刑警寧澤煌贴,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布御板,位于F島的核電站,受9級特大地震影響牛郑,放射性物質(zhì)發(fā)生泄漏怠肋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一淹朋、第九天 我趴在偏房一處隱蔽的房頂上張望笙各。 院中可真熱鬧钉答,春花似錦、人聲如沸杈抢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惶楼。三九已至砌创,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鲫懒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工刽辙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窥岩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓宰缤,卻偏偏與公主長得像颂翼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子慨灭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355