Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > 顔認識で橋下さんの鼻に顔認識処理で画鋲を刺す

大阪都構想の橋下さんの鼻に誠意をもって顔認識処理で画鋲を刺す

先日大阪都構想でニュースがざわついておりましたが、 そこで自分が思っていたこと、なぜ鼻ピンしたのかを顔認識サンプルと誠意を込めて書き記してまいります。
(※選挙ポスターに画鋲を刺す事や、そもそも「他人様」の画像を変更することがタブーな事を理解しつつの投稿です。問題がないかの問い合わせメールを送る予定です。画像はWikipediaからの引用です)

サンプル画像 サンプル画像

まず私のスタンスは=都構想ですが賛成でした(上のように鼻画鋲させて頂いていますが、橋下さんは好きです)。ただ賛成反対に関係なく色々考えることもありましたので、アウトプットしてみます。 「大阪都構想」ですが、僕も含め多くの方が大阪府=>大阪都、に名称が変わって住所が大阪都堺うんたら、と変わるから 嫌だ、との勘違いが多かったのでは?と判定直後のTwitterなんかを見ているときに思っておりました。

私は大阪市民ではなく大阪府民なのですが、関心はあるけど本当に大阪都になるのかな、 と少し離れて見て気になっている中途半端府民でした。実際、市民ではありませんので選挙に参加することはなかったのですが、 これでもし本当に「大阪都」に変わっているのであれば、自分自身関心が薄くて危ないのではと思っていました。

自分の中で、法律や選挙は自分の外で起きていることであり、自分は当事者ではないという 考えが染み付いているのでは、、、。結局もし大阪都構想が通ったとしても、住所の名称が大阪都になることはなかったのですが、 この勘違いが生まれるのは、単純に私の勉強関心不足。ただ、どうにも「関心」がそちらに向かない、 学生時代に比べたら、比較的そちらを向いているが、やはり、足のつま先が入っている程度です。

大切とは思っていても、そこにしっかり向き合えない理由はなんなのかな、、、、と考えていたのですが、 やはり「政治」=「難しそう、面倒臭い」との構図がどうしても心の底から消えないのかなー(生理的な拒否反応)。 小学校や中学校時代に染み付いた「面倒そうな難しそう政治」には、ネガティブな気持ちが自然に湧いている気がします。

鼻ピン

そこで私は恐れながら思っていたのが「鼻ピン」でした。小学校時代に政治にまったく興味ないのに、 選挙ポスターに画鋲がささっているだけでテンションがうなぎのぼりになっていたのを思い出していました。 なので、政治家先生の鼻に画鋲をつきさして、最初の第一歩、政治を政治家を親身になる好きになる為に何か 、関心が生まれるのは大切なのじゃないかなと感じていたのです。 やはり政治家の方々は強面で真面目な人だらけですので、「隙をあえて見せていただく」為にも 、小さな小さな最初の関心の第一歩の扉を開くことができないかなぁと考えておりました。

冒頭、長くなりましたが、顔認識サンプルを作るための長々として理由でした。

(※実際のポスターに鼻画鋲を刺すのは違法ですのでダメです!選挙前の実際のポスターに悪意や特定の政治家を下げるためであればもちろん問題ですが、誠意をもって均等に「政治に興味をもつために」 一つの手で実施するのはどうなんだろうか、それで関心をもつきっかけになるのであれば良いのにと思っているのですが、どうなんだろうか)

参考:004 顔認識
参考:[Swift] CIFaceFeatureで顔を検出してマスクをつけてみた
参考:SwiftとCIDetectorで効率よくアイドルの写真にヒゲを書き加える方法
参考:oggata/FacialRecognition

やってみた

CIDetectorを利用するとできるとの記載を元に進めます。


import UIKit
import CoreImage

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let url_face = NSURL(string:"[画像のURL]");
        //http://ja.wikipedia.org/wiki/%E6%A9%8B%E4%B8%8B%E5%BE%B9#/media/File:Toru_Hashimoto_Ishin_IMG_5731_20130713.JPG
        var err_face: NSError?;
        var imageData_face :NSData = NSData(contentsOfURL:url_face!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err_face)!;
        var image_face = UIImage(data:imageData_face);
        var imageView: UIImageView = UIImageView(image: image_face);
        
        var ciImage  = CIImage(CGImage:imageView.image!.CGImage)
        var ciDetector = CIDetector(ofType:CIDetectorTypeFace
            ,context:nil
            ,options:[
                CIDetectorAccuracy:CIDetectorAccuracyHigh,
                CIDetectorSmile:true
            ]
        )
        var features = ciDetector.featuresInImage(ciImage)
        
        UIGraphicsBeginImageContext(imageView.image!.size)
        imageView.image!.drawInRect(CGRectMake(0,0,imageView.image!.size.width,imageView.image!.size.height))
        
        for feature in features{
            var drawCtxt = UIGraphicsGetCurrentContext()
            var faceRect = (feature as! CIFaceFeature).bounds

            //pin
            let url_pin = NSURL(string:"[画像のURL]");
            var err_pin: NSError?;
            var imageData_pin :NSData = NSData(contentsOfURL:url_pin!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err_pin)!;

            var pinImg = UIImage(data:imageData_pin);
            var pinWidth  = faceRect.size.width * 4/5
            var pinHeight = pinWidth * 0.3
            var mouseRectY = imageView.image!.size.height - feature.mouthPosition.y - pinHeight/2;
            var pinRect  = CGRectMake(feature.mouthPosition.x - pinWidth/2,mouseRectY - pinHeight/2,pinWidth,pinHeight)
            CGContextDrawImage(drawCtxt,pinRect,pinImg!.CGImage)

        }
        var drawedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        imageView.image = drawedImage
        
       self.view.addSubview(imageView);
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

上記は参考のQiitaのoggata様のソースコードを参考にさせて頂いております。 上のサンプルはURLから直接顔画像や画鋲画像を読み込んでいますが、ローカルから読み込みたい場合や詳細(顔の全体図、目や口)はoggata様のコードが 詳細でわかりやすかったのでおすすめです!

まとめ

画像に著作権がある事や、政治家ポスターに画鋲を刺す事によって捕まってしまう人もいるので、 恐る恐るの投稿なのですが、一度大阪維新の会に問い合わせメールをしてみて、その結果この記事を閉じるか改変するかを決めたいと思います。 月曜から変な投稿になりましたが、都構想の案が通らなかった事でモヤモヤしてしまっていたので、何か記事にしたくての投稿でした。

読み方によっては他の方にモヤモヤさせてしまっているかもしれませんので、そうであればお許しください

↓こんな記事もありますよ!

のんでいるくすり: 3.11震災時の体験から開発されたお薬アプリ。無料

今日は薬を便利にかつ守秘的にメモできるアプリのんでいる薬をご紹介します。 実はアプリレビューは初めて。 SwiftサラリーマンのFBページを経由して開発者でもあり薬剤師のBlueRoy(ブルーロワ・インク) Inc. のShige様とお知り合いになる事ができて、是非レビューさせて下さいと私からお願いした経緯で今回レビュー記事に繋がりました。 Shige様、快く了承頂き本当にありがとうございました!

UITabBarController

スマホ画面下にタブが出てきて画面を切り替えできるUITabBarViewControllerクラスです。UITabBarItemの記事を追加しましたがUITabbarの記事がなかったので追加しました。(※目のチカチカにご注意ください。)

UITabBarItem

タブバーを利用した時にアイコンがデフォルトのものだけでは物足りなかったのでフリー素材でよさそうなサイトがあったので共有です。 500個も魅力的でオーソドックスで使いやすいアイコン盛りたくさん。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!