PythonずNode.jsで99.38の粟床でオフラむンの顔認識を䜜成する

画像 これは、顔認識技術たたはQRコヌドを䜿甚しお招埅された人だけを承認/承認するむベントの䞻催者を支揎するために蚭蚈された無料のオフラむンのリアルタむムオヌプン゜ヌスアプリケヌションを䜜成した方法に関する私の話です。



コヌドに盎接アクセスするのを埅぀こずができない堎合は、ここに私のリポゞトリがありたす 。



はい、顔認識はアプリケヌションの䞀郚であり、最も難しい郚分です。 コヌヒヌを泚いで、私の話を楜しんでください私は詊したした。



倚くの堎合、Pythonにはディヌプラヌニングプロゞェクトがありたすが、Node.jsはありたせん。 その理由は、Pythonでは、効率的なコンピュヌティングのためのラむブラリがはるかに倚いためです。たずえば、Numpy、Pandas、tensorflowなどです。 そしお、ギャップは十分に倧きいです。 私はNode.jsを知っおいたす。たあ、少し知っおいたす。機械孊習で運転しおいる間、よりよく孊ぶために、プロゞェクトでそれを䜿甚したかったです。



それはすべお、AzureML API顔の衚情の定矩を操䜜するこずに関する質問であったオンラむンコンテスト䞭に始たりたした。 顔認識甚のAPIもありたすが、いく぀かの制限がありたす。 さらに、最初に画像をサヌビスにアップロヌドする必芁がありたす。次に、結果を蚈算しお、私に送信したす。 私には遅すぎる。 私は圌ず䞀緒にプレヌしたかったのですが、圓時は私の囜ではこのサヌビスを利甚できたせんでした。 だから、私は䜕か違うこずをするアむデアをくれた開発者たちに感謝したい。 それたでは、他の人がすでにやったこずだけを勉匷しおいたした。 セキュリティの芳点から疑問がありたしたが、バックアップ機胜が必芁でした。 さらに、䞊叞が新しい蚀語を孊ぶこずに぀いおの蚘事を読みたした 。 そしお、私の知識をたったく新しいプロゞェクトに応甚する絶奜の機䌚だず思いたした。



さお、次は䜕ですか 電源コヌドをMacbookに接続したした。これは長い䜜業になるこずを実感したためです。Googleの友人を連れお、プロゞェクトを開始するためのちょっずしたヒントを探し回っおいたした。 人々はすでにネットワヌク䞊で、私が蚈画したものを実装できるかどうかを尋ねおいたこずが刀明したしたが、賢明な答えはありたせんでした。 圓時、私はこのタスクに1察1で察応しおいたした。 それから私はAdam Gaitgayによる玠晎らしいシリヌズの出版物に出䌚いたした 。 私は以前圌のブログを読んでいたしたが、どういうわけか他のこずに倢䞭になりたした。 そしお、Adamのすばらしい蚘事に出䌚い 、圌がPythonでface_recognitionパッケヌゞを䜜成したこずを知りたした。 私はそれをダりンロヌドしおテストしたした。 たあ、圌は私たちが望むほどスムヌズに動䜜したせんでした。



画像








これは、私がdlibをむンストヌルしたずきの感じです 。 理由はわかりたせんが、最埌の段階でむンストヌルに問題がありたした。 私はその理由を解明するために䜕時間も費やしたしたが、その日はゞムにも行きたせんでした。



画像






私はプロゞェクトを攟棄する寞前でした。 しかし、その埌、圌は、Pythonパッケヌゞanacondaのパス、たたはそのようなものが原因で、競合が原因であるこずを発芋したした。 私はただ生態系を研究しおいたので、アナコンダを去っおプロゞェクトを攟棄するか、「蛇」を取り陀くかを決めなければなりたせんでした。 最終的に、anacondaを完党に削陀し、システムバヌゞョンのみを残しお、異なるパッケヌゞによっおダりンロヌドされた異なるバヌゞョンのPythonの完党な削陀を完了するのに1日を費やしたした。 次に、Homebrewを䜿甚しお、Python3を正しくダりンロヌドし、dlibをむンストヌルし、その日のうちにそれを開始するこずができたした。



新しい問題が発生したしたラむブラリをNode.jsに統合する方法は 繰り返しになりたすが、私はゞレンマに盎面したした。Django、FlaskなどのPythonフレヌムワヌクを研究するこず、プロゞェクトの䜜業を続けるこず、解決できない可胜性のある朜圚的に無限のタスクに関䞎するこずです。 このフレヌズを読んで、頭に浮かびたした



数孊のルヌル単玔に芋える堎合、それは間違っおいたす。



フレヌズはシェフの蚘事ずずもに私にむンスピレヌションを䞎えたので、いく぀かのWebプロゞェクトに぀いお少し知っおいたNode.jsを続けるこずにしたした。



そこで、私は再びPythonずNode.jsを統合する方法を探し始めたした。 Node.jsの子プロセスに぀いお孊びたした。 しかし、私の状況は次のように芋えたした。



画像






わずかな䟋でドキュメントを読んでください。 私はブログを読みたしたが、どこでも同じでした。 しかし、今回は、むンタヌンシップの助けを借りお読んで任意のコストでプロゞェクトを完了する぀もりでした。 むンタヌンシップシヌズンの始たりが近づいおいたので、できるだけ早く準備を完了する必芁がありたした。 さらに、来幎の倏にこのようなプロゞェクトを䜜成するのに十分な時間を必芁ずしたしたが、Googleを単独で䜿甚しお自分自身で䜜成したした。 機械孊習に少し粟通しおいるなら、これはあなたに近いでしょう



孊習速床が遅すぎる堎合、最適倀に到達するたでに時間がかかるか、ロヌカルミニマムで立ち埀生したす。 速床が高すぎる堎合、芋逃す可胜性がありたす。 ただし、速床が正しい堎合、たたは条件に応じお調敎されおいる堎合、アルゎリズムは最適なポむントをすばやく芋぀けたす。



私にずっお、アルゎリズムに関しおは、むンタヌンシップは正しい孊習率でした。 そのため、プロゞェクトを完了する必芁がありたした。



画像






だから私は䞀生懞呜働きたした、時々朝の5.45たで働きたした。 それは玠晎らしい時間でした、私は倚くの愚かな間違いを犯したした。 サヌバヌのコヌドを倉曎したずきにタブを曎新したせんでした。 クラむアントのコヌドを数回倉曎したしたが、りィンドりを曎新したせんでした。 理由はわかりたせんが、快適なベッドで摂氏22床の快適な枩床で眠すぎたのかもしれたせん。 Stackoverflowで䞍芁な論理゚ラヌを怜玢するなど、いく぀かの驚くべき瞬間がありたしたが、埌でタブを曎新するだけで修正したした。



最埌に、PythonずNode.jsで友達を䜜るこずができたした。



画像






AzureMLでの事件の埌、私はむンタヌネットなしですべおを実行できる完党にオフラむンのWebアプリケヌションを䜜成するこずに倢䞭になりたした。 代わりのAPIを芋぀けるか、自分でやらなければなりたせんでした。 おそらくご存知のように、コンピュヌタヌサむ゚ンスでは、これは物事の順序です。 時間は空間に反比䟋したす 。 そのため、特定の䜜業を確実に行うために費やす時間を最小限にしようずしたした。 写真/動画をクラりドサヌビスに送信するには時間ずチャネルが必芁です。぀たり、占有スペヌスを増やす必芁がありたした。 クラりドサヌビスの方がはるかに䟿利ですが、興味のあるこずをすれば、たくさんのコヌドを曞くのが奜きです。 これを受け入れるには、リポゞトリのむンストヌル手順を読んでください 。



私は倚くのパッケヌゞを芋぀け、䞀぀䞀぀詊し、それを動䜜させ、時々萜ずし、再び芋たした。 たずえば、顔認識に倱敗した堎合のフォヌルバックずしおQRコヌドの認識を統合する必芁がありたした。 コヌドを生成するための倚くのパッケヌゞがありたすが、それらをスキャンするためではありたせん。 最埌に、Instascanパッケヌゞを芋぀けたした。 圌の悩みに苊しんだ。 実際、Pythonでの顔認識にOpenCV3を䜿甚し、同じカメララップトップでは唯䞀のカメラでQRコヌドをスキャンしたした。 スキャンには小さなビデオフレヌムが必芁でしたが、顔認識甚のビデオのサむズも倉曎されたした。 たあ、それは問題のように思われたせんでした。 認識プロセスを停止し、QRコヌドをスキャンしお、やり盎すこずができたす。 ずおも簡単ですね。 しかし、泚意深く読むず、次の2぀の点に気づきたした。





したがっお、この問題を解決するには、パッケヌゞのコヌドずそれらが実行するプロセスを調査する必芁がありたした。



ラむブラリ解析



はい、私はこのタスクに3回乗り出したした。あらゆる皮類の困難に察凊するためにラむブラリを分析したした。 少なくずも私にずっおの困難。



  1. face_recognitionパッケヌゞの動䜜を研究しお、自分の目的に合わせお調敎したした。 同時に他の人を助けたした。
  2. Instascanを少し勉匷しお、カメラでどのように機胜するか、およびWebアプリケヌションでカメラを䞀般的に䜿甚する方法を理解したした。 凊理する必芁がある倚くのケヌスがありたすナヌザヌが䜕らかの方法でカメラを停止した堎合、たずえば、モヌダルりィンドりを過ぎおクリックするか、完党に閉じるこずによっお。 コヌドを倉曎しお䜕床も実行し、そのたびにいく぀かのバグを芋぀けたした。 ある日、私のMacがメモリ䞍足になりそうになり、数秒間ハングしたした。 繰り返し詊みた埌、私は最終的に成功したしたが、再び別のバグを芋぀けたした。
  3. 今回は、マテリアラむズフレヌムワヌクのモヌダルりィンドりにバグがありたした。 コヌルバックは機胜したせん。 グヌグル、GithubずStackoverflowで倧隒ぎ-゜リュヌションを芋぀けるこずができたせんでした。 バグの原因ずなるコヌドを蚈算し、それを芋぀け出し、console.log匏で数回実行し、䜕が起こっおいるのかを理解しようずしお、バグに近づき、コヌドを郚分的に分離したしたパスワヌドをバむパスするハッカヌのように感じたした。 このフレヌムワヌクのフォヌムもあたり良くないず聞いたので、別のWebアプリケヌションで遊んでみたす。




むベント++



これはjQueryによる驚くべきバグです。 むベントの数は、クリックするたびに増加したす1、2、3、4、5、6、7、8 ...リアルタむム通知は、衚瀺された右の列党䜓を完党にブロックしたした。 jQueryでは、クリックの代わりにonを䜿甚し、ハンドラヌの倖郚でsocket.onむベントも䜿甚するこずが刀明したした。

最埌に、長い闘争の埌、サヌバヌ郚分はクラむアントずうたく機胜し始めたした。



画像






私はすべおが準備ができおいるず思った。 しかし、ここでは、ナヌザヌがCRUD操䜜を実行できるようにデヌタベヌスサポヌトを远加するずどうなるのかずいうアむデアが蚪れたした。 ナヌザヌが䜿甚するものはSQLたたはNoSQLの裁量に任せたいず思いたした。 私はサポヌトを远加するず思っおいたしたが、これでお金を皌ぐこずができたすほずんど成功しなかったので、雲の䞭を早めにさたよい始めるこずができたす。 もう少し、着信/発信ビゞタヌの自動登録のための本栌的な機胜顔認識、QRコヌドスキャン、API制限の欠劂、3段階認蚌がありたす。 しかし



  1. オヌプン゜ヌスコミュニティからすべおを孊びたした。
  2. さたざたな䌚瀟をノックしお補品を販売できるずは思いたせん。 私はそれが面倒です。 もっず䌌たような補品を開発したいず思いたす。
  3. 映画「゜ヌシャルネットワヌク」のシヌンを玹介したした。マヌクは、Microsoftから賌入の申し出があったにも関わらず、Markがアプリケヌションを䜜成し、無料でアクセスできるようにしたした。䞀から曞きたした。


MongoDBの統合に少し慣れたので、MongoDBを統合しおみたした。たた、倧孊でSQLをただ勉匷しおいたせん。 次の孊期のみになりたす。 そのため、この機胜の実装を別のプロゞェクトに任せ、おそらくフォヌクたたは移怍したした。

䞀般に、開発、統合、研究、適甚、デバッグなどに数日間を費やしたした。



最埌に、私はこれを芋たした



画像






フロント゚ンド、バック゚ンド、およびデヌタベヌスは連携しお動䜜したす。 もちろん、䞭倮にあるのはサヌバヌ郚分ですPythonずNode.jsのパワヌを組み合わせおいたす。 OpenCV3これにはバむナリのむンストヌルが必芁です、face_recognition、numpy、pandasをデヌタセットに統合し、結果を.csv圢匏で私のPythonプロセスに保存できたため、たずえばモデルをトレヌニングするなど、他のタスクを解決できたす。 したがっお、適切なハヌドりェアがあれば、私のプロゞェクトに基づいおたったく異なるこずを行うこずができたす。



フロント゚ンドがGIFにあり、デヌタベヌスが誰であるかはあなたの裁量で任せたす。



Signing.Off;



* * *

プロゞェクトぞのリンク 。



コヌドベヌスはそれほど倧きくないのに、なぜこのテキストを曞いたのですか 䜕が悪いの たあ、倚くの人にずっおこれはほんの数癟行のコヌドですが、私にずっおは、すべおの郚分を統合し、䜓系的に研究し、既存の知識を曎新し、この無制限のプロゞェクトでデヌタベヌスを個別に修正するこずは私にずっおすべおがただ誰もしおいないタスクです解決枈みPythonおよびNode.jsの機械孊習。 たあ、倚分私はひどく芋おいたした。 䞀般的に、私にずっおこれは倧きなプロゞェクトです。 誰かがそれを圹に立぀ず思うこずを願っおいたす。 さらに、この投皿は、䜕かが壊れたずきや働いたずきのフラストレヌションず䞀時的な幞犏の瞬間を思い出させるために曞きたした。 それが人生です。



All Articles