現在、Jetson
Nanoにwebカメラを接続してリアルタイムで顔認識をすることを目標としています。OSはLinuxです。顔認識にはOpenCVを利用してPythonでコードを記述し、プログラムをターミナル上で実行して顔認識を行いたいのですがうまくいきませんでした。以下が実行したコードとなります。

```

    # coding: utf-8
    import subprocess
    import cv2
    
    # GStreamerコマンド
    command = (
        "gst-launch-1.0 nvarguscamerasrc ! "
        "video/x-raw(memory:NVMM),width=1280,height=720,framerate=60/90,format=NV12 ! "
        "nvvidconv ! video/x-raw,width=640,height=480 ! "
        "nvvidconv ! nvegltransform ! nveglglessink -e"
    )
    
    # カメラ起動
    camera_process = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE)
    
    # OpenCVを使用してカメラからの映像をキャプチャ
    cap = cv2.VideoCapture("nvcamerasrc ! video/x-raw(memory:NVMM),width=640,height=480,format=NV12,framerate=30/1 ! nvvidconv flip-method=0 ! video/x-raw,width=640,height=480,format=BGRx ! videoconvert ! video/x-raw,format=BGR ! appsink", cv2.CAP_GSTREAMER)
    
    # 顔認識のためのHaarcascades分類器をロード
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
    
    while True:
        ret, frame = cap.read()  # フレームをキャプチャ
    
        if not ret:
            break
    
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # グレースケールに変換
        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))  # 顔を検出
    
        # 検出された顔に矩形を描画
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
    
        # 画面に表示
        cv2.imshow('Face Detection', frame)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):  # 'q'キーでループを抜ける
            break
    
    # 終了処理
    cap.release()
    cv2.destroyAllWindows()
    camera_process.kill()  # GStreamerプロセスを終了
    
```

構想としては、webカメラを起動するコマンド(6行目辺りからのcommandの中身)をsubprocessを利用して実行後、OpenCVを使用してカメラからの映像をキャプチャして顔認識を行う流れを予定していたのですが、ターミナルで実行後、6行目のcommand
= の部分に構文エラーがあるとエラーメッセージが出てしまいました。

そこで教えていただきたいのは、

  1. 6行目の構文エラーの解決方法と、GStreamerの使い方はこれで合っているのか
  2. このプログラムでリアルタイムの顔認識は実現できるか
  3. １，２に問題がないにもかかわらず実行できない場合、どのような問題が考えられるか、またその対処法
  4. 上記のコード以外でリアルタイムの顔認識を行う手順

について教えてください。

python初心者ですので、できるだけかみ砕いた説明をよろしくお願いいたします。  
つたない文章申し訳ありません。
CC BY-SA 4.0
2023-08-23T07:58:01.390
96022
2023-08-23T09:12:15.217
59553
question
python linux opencv subprocess
Jetson Nanoでlinux環境のもとOpenCVを使ってPythonで顔認識をする方法を教えてください。
気になった点を挙げると…

  * `command` に代入しているコマンドですが、実際には一行で実行されるはずなので手っ取り早くは定義も一行にしてみる
  * `!` を含むので、ダブルクォートではなくシングルクォートで括ってみる
  * もし配列として定義しているつもりであれば、要素の区切りに`,` が必要

修正例:

```

    command = (
        'gst-launch-1.0 nvarguscamerasrc ! ',
        'video/x-raw(memory:NVMM),width=1280,height=720,framerate=60/90,format=NV12 ! ',
        'nvvidconv ! video/x-raw,width=640,height=480 ! ',
        'nvvidconv ! nvegltransform ! nveglglessink -e'
    )
    
```
CC BY-SA 4.0
2023-08-23T09:12:15.217
96026
2023-08-23T09:12:15.217
3060
96022
answer