なになれスマートフォン用の表示で見るなになれIT系のことを記録していきます。いった「人」が画像処理の対象でした。そこで得られた知識をまとめたいと思います。筆者は主にWeb領域のソフトウェアエンジニアで画像処理を専門に取り組んできたわけではないです。本投稿は、そこそこプログラムが書ける立場で画像処理に取り組んだ経験を元にした内容になっています。Pythonに関してもほぼ経験がない状態でした。画像処理にはPythonが良いOpenCVが手軽に使える計算処理が簡単にできるそのほか機械学習系のライブラリが充実しているOpenCVは画像処理に必要な機能が豊富なライブラリです。documentation顔検出の機能もあります。documentationPythonの環境構築AnacondaAnacondaという諸々のライブラリが入ったPythonパッケージを使うのが良かったです。Notebookでインタラクティブな開発環境を作ることができますし、NumPyなど計算処理向けのライブラリが同梱されています。opencv-python非公式ながらOpenCVを簡単にインストール可能なPythonパッケージがあります。pypi.orgOpenCVを使う時にはとりあえず使っています。画像処理向けのWebAPIサービス画像処理をするにあたって、手始めに画像処理サービスをいくつか使いました。この手のサービスでは、WebAPIを実行するだけで画像の処理を行うことが可能になっていて非常に手軽に利用できるので、入門としては適当だと思います。ServicesMicrosoftが提供するAIのWebAPIサービスです。FaceAPIを使いました。顔を検出して、年齢、性別といった属性情報を取得できます。RekognitionAmazonが提供するAIのWebAPIサービスです。顔の検出や分析の機能を利用しました。Servicesとの違いとしては以下のような点がありました。動画をそのまま扱える得られる年齢の幅が広い横顔の顔検出にも対応できているこういったWebAPIで利用できるAIのサービスには大きな違いはないというのが印象です。実際の状況に当てはめると画像処理サービスでは対応できないことが多いため、自分たちで実装を行う必要があります。実際の状況に応じて画像処理の精度を高めたい場合には作りこみが必要になります。OpenCVなどを活用しながら実装を進めます。今回は物体認識という分野の画像処理になります。対象とする物体は「人」ということになります。昨今の物体認識ではディープラーニングを元にした手法が主流になっていて、その中でも代表的な以下の手法があります。R-CNNという手法は画像から物体の領域を特定することが可能になっていて、物体の検出精度も高い手法になっています。github.comただ物体の検出は処理時間とのトレードオフになっています。精度が高い手法はその分だけ処理時間もかかってしまうという問題を抱えていて、ユースケースに応じて使用する手法を選ぶ必要があります。リアルタイムでの処理が必要な場合、処理時間が短い手法を選ぶ必要がありそうです。R-CNN系の手法に比べて、SSDやYOLOは処理時間が短い手法になっています。検出は追跡に比べて時間がかかります。物体に識別子をつけることで同じ人物を誤認識することを回避できます。物体に識別子をつけるという処理は追跡でしか出来ないために人物検出と人物追跡を組み合わせる必要があります。この点に関して、こちらの内容が参考になりました。SSDと物体追跡の手法を組み合わせたものになります。物体追跡では、OpenCVにもいくつかの手法があります。www.pyimagesearch.com追跡には様々な手法が提供されていますが根本的な問題があります。それは追跡では物体の重なりによって追跡対象が切り替わる可能性があることです。これは追跡の根本的な欠陥です。追跡の手法にリソースをかけても根本的な解決にはならないので、処理時間が短く精度がそれなりに高い手法を選ぶのが良いと思います。本当に正確な追跡を行いたい場合、3Dのデータを活用して物体の奥行きを把握しなければなりません。まとめPythonによる画像処理という課題を通して、画像処理の現状を知ることが出来ました。取り組んでみての所感としては、画像処理というのはまだまだ専門的な領域であるということです。この領域ではディープラーニングを元にした多くの手法が短期間で提案されて発展しています。このような状況をいちソフトウェアエンジニアがキャッチアップすることは難しく、画像処理の専門家が必要な状況です。今回は実施していないのですが、精度を求めていくとその状況に応じたデータを用意してモデルを作成しなければ難しいという結論になり、そのための専門的なスキルが新たに必要になります。機械学習を簡単に実施可能なライブラリがオープンに利用できるような状況になっていて、いちソフトウェアエンジニアが機械学習の範囲でやれることが増えたことは間違いないと思います。その領域を本格的に実施する場合には、ただライブラリを利用できるだけでは難しく、その分野での専門的なスキルが必要だということを感じました。今年を振り返る的な投稿です。今年も色々学べました。技術...2018-12-01NgRxを試した所感NgRxはAngularにおける状態管理のためのライブラリです。»プロフィールid:hi1280日々で得たIT技術を記録していきます。月別アーカイブ注目記事はてなブログをはじめよう!hi1280さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。