マスク未着用検知iOSアプリをVisionフレームワークで実装する
iPadやiPhoneのカメラ・フレームを分析して、マスクを着用していない人を検知できるアプリをかんたんにつくることができます。
GitHubでアプリ公開しています。
https://github.com/john-rocky/MaskPlease
お店の入り口などに置いてください。
マスク着用の判定方法
マスクを着用していない人がいるかを特定するためには、鼻や口がうつっているかどうかをたしかめればいいです。
Visionフレームワークの顔検出機能は、マスクを着用していると検知できません。
ゆえに、Visionで顔を検出できるということは、その顔はマスクをつけていないといえます。
VNDetectFaceRectanglesRequestにカメラの映像を1フレームずつ渡します。
let detectFaceRequest = VNDetectFaceRectanglesRequest(completionHandler:self.processVisionRequestResults)
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
return
}
let imageRequestHandler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: exifOrientation, options: [:])
do {
try imageRequestHandler.perform(self.requests)
} catch {
print(error)
}
}
顔がうつっていればアラートを出す
VNFaceObservationのresultがあれば、顔がうつっているので、「マスクをつけてください」というアラートをだします。
guard let observation = results.first as? VNFaceObservation else {
//顔の結果なし
imageView.image = UIImage(name:"thanksForWearing")
}
//顔の結果あり
imageView.image = UIImage(name:"pleaseWearing")
AVSpeechSynthesizerを使うと、音声で呼びかけてくれます。
let talker = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: NSLocalizedString("Please wear a mask.", comment: "") )
utterance.voice = AVSpeechSynthesisVoice(language: NSLocalizedString("en-US", comment: ""))
talker.speak(utterance)
VNDetectFaceObservationは顔を囲む四角形の座標もくれます。
カメラ画像に「マスク未着用」の四角警告をオーバーラップさせると、アプリがより監視してるテイストになります。
機械学習系の情報を発信しています。
https://twitter.com/JackdeS11
Author And Source
この問題について(マスク未着用検知iOSアプリをVisionフレームワークで実装する), 我々は、より多くの情報をここで見つけました https://qiita.com/john-rocky/items/44bd53abbb1cc1a87f85著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .