文字標識を認識して動作するラズマウス4号機の製作記録
ラズマウスに取り付けたカメラで標識に書かれた数字を認識して、その数字が意味する動作(左折、右折、前進、後退、停止)を実行するラズマウス4号機の製作記録。
ラズパイの標準フォントの数字を学習させ、ラベルに印字した数字を認識するプログラムは、このサイトの「プログラム事例」の「ラズパイのフォントで学習する文字認識プログラム例」を使った。
●数字を認識するラズマウスの構成部品
●プログラム構成
数字を認識するモジュールは、このサイトの「プログラム事例」の「ラズパイのフォントで学習する文字認識プログラム例」のRasRecogNum.pyモジュールをimportして使った。
(1)ラズマウスの動作停止
(2)数字標識の画像をキャプチャ
(3)数字標識ラベルの切り出し
(4)数字標識の中の数字画像の切り出し
(5)文字認識学習モデルで数字を認識
(6)数字に割り付けられた動作開始
<数字標識認識ラズマウスのプログラム事例>
# -*- coding: utf-8 -*- import RasRecogNum as RRN import time def recognizeNo(): # カメラからの画像をキャプチャして表示 ret, frame = RRN.cap.read() RRN.cv2.namedWindow('VIDEO', cv2.WINDOW_AUTOSIZE) RRN.cv2.imshow('VIDEO', frame) imgGray, imgThresh = RRN.transImage(frame) # 解析用の画像変換 allContours, contLabelAttr = RRN.detectLabelContours(imgThresh) # ラベル輪郭の検出 # no:Label輪郭番号、(cx,cy):重心、boxNP:輪郭矩形4コーナー座標、boundR=(xb, yb, wb, hb) recogListInLabel = [] recogNoListInFrame = [] if len(contLabelAttr) > 0: # ラベルを1個以上検出した場合 print("The number of Detected Label =====", len(contLabelAttr)) for lblNo in range(len(contLabelAttr)): imgThreshLabel = RRN.cutImgLabel(contLabelAttr[lblNo], imgThresh) # ラベル画像(2値化)を切り出し mojiRectList = RRN.detectMojiFromLabel(imgThreshLabel, 0.15, 0.2) # ラベル内の文字輪郭検出 # mojiRectList=[[ptj1(x,y), ptj2(x,y)],.......]=認識文字のローカル座標 if len(mojiRectList) > 0: # 文字輪郭がある場合、数字認識 strNo, recogNoList = RRN.recognizeNumber(mojiRectList, imgThreshLabel) # strNo:認識した複数の数字(str型)、recogNoList:検出数字リスト(左から順に)Dict型 print("Recognized Number = ", strNo) recogListInLabel.append([lblNo, strNo, recogNoList]) recogNoListInFrame.append(strNo) else: print("NG! 認識ラベル無し") returnStrNo = "" RRN.drawResult(allContours, contLabelAttr, recogListInLabel, frame, imgGray, imgThresh) # 認識結果の画像表示 if len(recogNoListInFrame) > 0: # 画面内に複数の認識数字を検出した場合 for i in range(len(recogNoListInFrame)): strNo = recogNoListInFrame[i] ### 登録されている数字なら returnStrNo = strNo ### 登録されていない数字なら returnStrNo = "" return returnStrNo """メイン関数""" if __name__ == '__main__': while True: ### ラズマウスの動作プログラム ### ### ラズマウスが停止したら、数字標識を認識するモジュールを呼ぶ retNo = recognizeNo() ### retNo で 次のラズマウスの動作
●文字認識ラズマウスの走行テスト
ラズマウスは紙壁に向かって前進し、7cm手前で停止。カメラでキャプチャした画像を処理して、学習モデルから印字している数字を認識。数字にはそれぞれ次の動作が決められており、認識した数字に従って次の動作を実行し、次の紙壁に向かって前進する。今回は4個の紙壁と数字標識を用いて、走行試験をした。
●文字標識を認識して動作するラズマウス(YouTube)
ラズマウスに取り付けたWEBカメラでキャプチャした標識に書かれた数字を認識して、その数字が意味する動作(左折、右折、前進、後退、停止)を実行するラズマウス4号機。ラズパイの標準フォントの数字を機械学習(ディープラーニング)させ、その学習モデルでラベルに印字した数字を認識する。数字認識学習モデルは、MLPとCNNで行ったが、この事例ではMLPを使った。