ラズタンク制作・カメラ画像 特集

ラズパイカメラ・モジュール(レガシーカメラ) 
【注意】※最新のラズパイOSでは基盤に実装するカメラが非対応と悲しい。「Raspberry Pi OS (Legacy)」をインストールして使います。

本日のメニュー

  1. 開発者のためのプラットフォーム GitHub
  2. レガシーカメラ picamera
  3. オブジェクト Object
  4. カメラ動画撮影 VideoCapture
  5. 画像認識AI, OpenCV
  6. ラズタンク・リモート運転

開発者のためのプラットフォーム [GitHub]

GitHubは、複数のプログラマーが共同でコードを開発する場所。置き場所をリポジトリという。

GitHubから最新のコードをダウンロードしてみよう

$  git  clone  https://github.com/CoderDojoOme/razpi.git

すると新しくrazpiディレクトリが作成される。
$ cd razpi
ファイルを確認する。ファイルが有れば成功。
$ ls

ラズパイカメラを装着

ケーブルの青色を目印する。

ラズパイカメラの検査

カメラデバイスが認識されるかテスト

$ vcgencmd get_camera

supported=1 detected=0, libcamera interfaces=0
         ↑ ここを見る
supported=1 detected=0 #認識されてない
supported=1 detected=1 #認識された

カメラで撮影できるかテスト

$ raspistill -o test.jpg

レガシーカメラ picamera

ラズパイ専用カメラで撮影した画像を保存するコード。手入力でコードを書いてみてください

実行してみる。

$ python cap.py 

オブジェクト Object

オブジェクト指向プログラミングでは、関連するデータを束ね、代入、演算、関数、メソッドを介した受け渡し、といった操作の対象にでき、またメッセージの受け手になれる実体をオブジェクトと呼ぶ。

レガシーカメラ picamera

使えるコード[camera.py]

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import picamera
import time

def capture( intW, intH ):
    global picamera
    picamera = picamera.PiCamera()
    picamera.resolution = (intW, intH)
    picamera.rotation = 180
    picamera.start_preview()
    picamera.led = True
    #time.sleep(2)
    picamera.capture( "/home/pi/python/picture.jpg" )

if __name__ == '__main__':
    if (len(sys.argv) <=2):
        intWidth = 800
        intHeight = 600
    else:
        intWidth = int(sys.argv[1])
        intHeight = int(sys.argv[2])

    capture( intWidth, intHeight )

解像度 800 x 600 ピクセルで撮影、画像をファイル名「picture.jpg」で保存

$ python camera.py 800 600

$ python camera.py 1024 800

カメラ動画撮影 VideoCapture

まず実行してみよう

$ python video.py

小さいカメラ画像を取得しています。PC画面でこれを拡大する改造をしてみましょう

画像認識AI, OpenCV

OpenCVは画像処理・画像解析および機械学習用pythonライブラリ
まず実行してみよう

$ python capture.py

顔を検出して、緑色の四角形で顔を囲う描画をしています

検出する物体はHaar-like特徴分類器ファイルで変更することができます。

haarcascade_eye.xml			目
haarcascade_eye_tree_eyeglasses.xml	メガネ
haarcascade_frontalcatface.xml		猫の顔 (正面)
haarcascade_frontalcatface_extended.xml	猫の顔 (正面)
haarcascade_frontalface_alt.xml		顔 (正面)
haarcascade_frontalface_alt2.xml	顔 (正面)
haarcascade_frontalface_alt_tree.xml	顔 (正面)
haarcascade_frontalface_default.xml	顔 (正面)
haarcascade_fullbody.xml		全身
haarcascade_lefteye_2splits.xml		左目
haarcascade_lowerbody.xml		下半身
haarcascade_profileface.xml		顔 (正面)
haarcascade_righteye_2splits.xml	右目
haarcascade_smile.xml			顔 (笑顔)
haarcascade_upperbody.xml		上半身

180度回転したい場合。

# USBカメラで画像を取得する。
    capture = cv2.VideoCapture(0)
    rtn, frame = capture.read()
    img_rotate = cv2.rotate( frame, cv2.ROTATE_180 )
    if( rtn == True ):
        cv2.imwrite( "capture.jpg", img_rotate )

グラフィックを変更できる

線分を描画: cv2.line()
矢印を描画: cv2.arrowedLine()
長方形を描画: cv2.rectangle()
円を描画: cv2.circle()
楕円を描画: cv2.ellipse()
円弧を描画: cv2.ellipse()
マーカーを描画: cv2.drawMarker()
折れ線、多角形を描画: cv2.polylines(), cv2.fillPoly(), fillConvexPoly()
文字列(テキスト)を描画: cv2.putText()

画像を反転:cv2.flip()
  #cv2.flip(第一引数は画像データ, 第二引数が方向[0:上下反転, 1:左右反転, -1:左右反転&上下反転])
  #使い方の例(上下反転): imgFlip = cv2.flip(frame,0)


▼マニュアル
https://docs.opencv.org/3.4.0/d6/d6e/group__imgproc__draw.html

色彩検出もできる

赤色だけを検出したサンプル。色彩検出のコードは、ラズタンクの自動走行[video-track.py]で使っています。
タイムアウト用モジュールをインストールするには[$ pip install timeout-decorator]です。

色彩画像認識

次回はラズタンクをリモート運転

  1. 1.ラズタンクにリモート接続[$ mstsc /v:razpi**.py]
  2. 2.ターミナル1起動し、カメラ動画撮影ON[$ python video.py]
  3. 3.ターミナル2起動し、ラズタンク運転[$ python tank.py]
  4. 4.ターミナル3起動し、サーボモーター起動[$ python servo.py]

ラズタンク制作・カメラ画像 特集」への3件のフィードバック

    1. 下記、反転のコードを本文に追記しました。左右なので第二引数は1です。

      画像を反転:cv2.flip()
      #cv2.flip(第一引数は画像データ, 第二引数が方向[0:上下反転, 1:左右反転, -1:左右反転&上下反転])
      #使い方の例(上下反転): imgFlip = cv2.flip(frame,0)

コメントを残す