お問い合わせ
2 分で読むことができます

物体検出の開発経過 その1

執筆者 Dragon 更新日時 2020年8月04日

こんにちは。Dragonです。 
今回は、開発途中のブログ内容となります。2カ月ほど前にPythonOpenCVを使った車の物体検出を開発試行してました。現在、諸事情のため保留中ではありますが、せっかくなので経過を報告したいとおもいます。

目次

 その前にラオスの事を少しだけ紹介します。ラオスの認知度が低いというか、どこにあるのか知らない人が多いので、実は私も行く前までにどこにあるのか知らなかったのですが。。。

1855372 ラオスは東南アジアに位置しASEAN唯一の内陸国です。北は中国、ミャンマー、東はベトナム、西はタイ、南はカンボジアに囲まれています。ASEAN唯一の内陸国で海はありません。タイとの国境沿いにメコン川が流れており、生活の一部となっており、ラオス人にとても親しまれています。主な輸出産業は電力で輸出額の30%も占めます。メコン川を利用した水力発電によって、隣国タイなどに売電をしています。
 そんなラオスも経済成長著しく日本の若者と同じくスマホをもち日本と変わらない光景を目にします。もちろん通話やゲームもしますが、PayPayのような電子決済サービスOnePayというものがあり路上にある屋台とかでも使えます。Uber Eatsのような宅配サービスFood PandaやUberのような配車サービスLocaなど、日本と同じか規制がない場合はビジネス展開されています。個人的には配車サービスよりはトゥクトゥクという乗り物の運転手に行き先や値段を交渉して、ぼったくられていない金額で行く方が楽しいです

 

OnePayFoodPanda

Loca 
 
 
 
 
 
 
 
 
 
 
 
 このように昔ながら考え方、発展途上国=貧しいとはならず一部の地域はでITサービスが充実しており、その国独自の発展仕方があるのではないかと楽しみにしています。
 
 

では、本題へ戻ります。

 今回挑戦したのは、車の物体検出のためにOpenCVを使ったカスケード分類器というものを試みました。巷によくある顔認識を車におき換えたものと思ってだければとおもいます。
おおまかな流れとして機械学習させるための画像集め→機械学習→分類器を作成するという工程です。精度を上げるためどのくらいの写真を読ませるか肝になる感じです。出来た分類器を確認しながら繰り返していきます。

PythonOpenCVのインストール手順は省きますが、使ったPythonバージョンは3.8.3になります。

1.処理の流れ

  1. 5分おきにオフィス前の道路(車)の写真をとる。(Python
  2. 画像の中から取得したい物体画像と不要な画像を振り分ける。(目視)
  3. 取得したい物体画像をX,Y座標をテキストにする(NeoTrainingAssistant
  4. OpenCVを使って分類器を作成する。
  5. 実際に判断させて、問題があれば1から始めて写真を追加する。
     

 

2.画像取得(Python)

 Pythonを使って定期的に画像を取得します。


import cv2
import os
import datetime

 def save_camera(device_num, dir_path, basename, cycle, ext='jpg', delay=1, window_name='frame'):
   cap = cv2.VideoCapture(device_num) 
   if not cap.isOpened():
       return
   os.makedirs(dir_path, exist_ok=True)
   base_path = os.path.join(dir_path, basename)
     n = 0
   while True:
       ret, frame = cap.read()
       cv2.imshow(window_name, frame)
       if cv2.waitKey(delay) & 0xFF == ord('q'):
           break
       if n == cycle:
           n = 0
       cv2.imwrite('{}_{}.{}'.format(base_path, datetime.datetime.now().strftime('%Y%m%d%H%M%S'), ext), frame)
       n += 1
   cv2.destroyWindow(window_name)
save_camera (0, 'data/temp', 'camera_capture_cycle', 250)

<要点説明>

if cv2.waitKey(delay) & 0xFF == ord('q'):はqキーを押すと処理中断
・ファイル名は、年月日時分秒
save_camera (0, 'data/temp', 'camera_capture_cycle', 250)
    このファイルと同じ場所にdataフォルダを作りその配下のtempフォルダに写真が保存されます
    250はだいたいカメラフレームのタイミングのようなので、秒ではないようです。
    各自のPCについているカメラで調整となります。

 

画像がこのような形で、10秒程度ごとに保存されます。

 camera_capture_cycle_20200626124735256853

次回は取得した画像を振り分けと実際の分類器処理までお伝えできればと思います。

Dragon

執筆者 Dragon

沖縄県宜野座生まれ、新潟競馬場で馬に関わる仕事を携わり、当時トレンドのIT業界へ参入。中国、ベトナムのオフショア開発を経て、INSIGHT LABを一時退職し、JICA青年海外協力隊でラオスへ渡航。2020年3月に帰国し、新潟研究開発センターへ合流。社会課題をテクノロジーを使って解決したい。世界的に話者の少ないラオ語を話せる。趣味はランニング。

 

こちらの記事もおすすめです

2 分で読むことができます。

物体検出の開発経過 その1

2 分で読むことができます。

物体検出の開発経過 その2

1 分で読むことができます。

スタートアップ大国イスラエルで会社を創った話し-1