PaddleDetectionを使用して独自の画像予測プロジェクトを作成します(2)カメラ検出を使用して座標を取得します

私は長い間ハードウェアと3D印刷の鳩を手に入れてきましたが、今は前回のPaddleDetectionの使用方法を使い続けています。

この記事の目的は、ターゲット検出のためにカメラを呼び出すことなので、opencvを使用する必要があります。
バージョンの変更により、opencvをpythonでインストールし、pipでインストールすると、pip installopencv-pythonであることに注意してください。 pip install opencvの代わりに、

また、パッケージを参照するときは、importopencvではなくimportcv2と記述する必要があります

ステップ1:ウェイトファイルを準備する

前のブログでは、次の図に示すように、ウェイトファイルをトレーニングしました(名前はbest_model、選択したウェイトファイルの名前は異なり、前のブログの出力モデルフォルダーはinference_modelです)
ここに画像の説明を挿入します
次に、修正する必要があります。これらの3つのウェイトファイルが再度処理されます。ここでは、toolsフォルダー内のexport_model.pyファイルを呼び出す必要があります。
コマンドは次のとおりです。

python tools/export_model.py -c configs/yolov3_mobilenet_v1_fruit.yml -o weights=inference_model/yolov3_mobilenet_v1_fruit

その中で:(処理するウェイトファイルの名前を追加することを忘れないでください!)ここに画像の説明を挿入します
これらの3つのファイルは後で出力されます。ここに画像の説明を挿入します
デフォルトの出力パスはoutput \ yolov3_mobilenet_v1_fruitですここで(yolov3_mobilenet_v1_fruitは選択したモデルの名前で名前が付けられたフォルダーです)
指定した場所を出力するには出力し--output_dirたいパスをコマンドラインの後に追加します

取得した3つのファイルで、メモ帳を使用して開き
infer_cfg.ymlのラベルが独自のラベルであるかどうかを確認します。そうでない場合は変更します。

プログラムがコードに付属するデフォルトのラベルを使用する状況があります(自転車など、特定の理由は、ラベルを処理するコードの部分が間違っているためであり、システムはデフォルトで以前のプリセット値になります。間違った部分、最近それを見つけるのが面倒です。出力infer_cfg.ymlファイルを変更してみましょう。プロテストの効果は同じです)

2番目の部分は、推論ファイルを変更します

推論ファイルを変更する前に、それを使用してビデオ(MP4 aviなど)を入力し、マークされた場所でビデオファイルを出力して、重みファイルの正確さを検証できるかどうかを確認できます(通常、画像予測はOKです、ビデオそれなら問題ありません)

python deploy/python/infer.py --model_dir=output/yolov3_mobilenet_v1_fruit/ --video_file=../../work/test.mp4 --use_gpu=True  --thresh=0.2

それらの中で:
-model_dir =最初のステップで取得した3つのファイルのパスが続きます

--Video_file =の後にテストしているビデオファイルのパスが続きます(相対パスと絶対パスの問題に注意してください。絶対パスを使用することをお勧めします)

--Use_gpu = TrueとFalseは、GPUコンピューティングを有効にして速度を上げるかどうかを決定します

--Thresh =の後に認識限界のしきい値が続くほど、類似性が高いほど、類似性を認識できるようになるため、約0.2にすることをお勧めします
(Linux環境の古いアイアンの場合は、突然覚えておいてください。呼び出しコマンドに追加することを忘れないでください。前に感嘆符を追加してください。
そうしないと、権限が十分でなく、実行されない可能性があります。Baidualstudioで追加する必要があります)

上記の出力予測ビデオに問題がない場合は、推論ファイルをバックアップしてから変更を開始することをお勧めします。
次のパートに従ってデフォルトのvideo_fileパラメーターを文字列タイプから整数に変更し、設定します。デフォルト値は0です(外部カメラは0、内蔵カメラは1です)
ここに画像の説明を挿入します
次に、ソースプログラムの部分を見つけて次のように変更します。ここに画像の説明を挿入します
独自のプロジェクト調査のため、変更する場所はたくさんあります。プログラム。左側の行数は無視してください。
上の図と同じです。video_file変数を見つけてください。実際の変更はpredict_video関数(メソッド)です。

実際、ビデオストリームのパスをカメラに置き換えるだけです。とにかく、変更後、元のパスを次のpredict_videoに置き換えます。

def predict_video():
    print("predict_video")
    detector = Detector(
        FLAGS.model_dir, use_gpu=FLAGS.use_gpu, run_mode=FLAGS.run_mode)
    print("打印下")
    print(FLAGS.video_file)
    capture = cv2.VideoCapture(FLAGS.video_file)
    capture.set(3, 640)
    capture.set(4, 480)  # 360
    # capture.set(3, 320)
    # capture.set(4, 180)
    # capture.set(3, 1280)
    # capture.set(4, 720)
    # capture.set(3, 160)
    # capture.set(4, 90)
    # fps = 30
    # width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
    # height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
    # fourcc = cv2.VideoWriter_fourcc(*'mp4v')

    index = 1
    while (1):
        ret, frame = capture.read()
        if not ret:
            break
        print('detect frame:%d' % (index))
        index += 1
        results = detector.predict(frame, FLAGS.threshold)  # 坐標得到..............

        if (results == 0):

            im = frame

        else:
            im = visualize_box_mask(
                frame,
                results,
                detector.config.labels,
                mask_resolution=detector.config.mask_resolution)
            im = np.array(im)
        cv2.imshow("capture", im)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

呼び出されるコマンドは

python deploy/python/infer.py --model_dir==这里填存放之前转出来的三个文件的文件夹的路径   --thresh=0.2

この時点で、あなたが実際に実行し、画面上のビデオ画像を見ることができるに示すように
図:ここに画像の説明を挿入します
その後、いくつかの暖かいヒントがあり、コードのコメント部分は、フレームの解像度と数を変更するために使用する部品を交換することができますビデオ。
ビデオ録画を認識し、変更された参照コードをここに数行保存します(ブロガーの非常に詳細なコメント)ポータル

最後に、認識されたオブジェクトの座標データの取得について少し説明します。印刷されたデータをマークされた画像と比較したところ、ここの座標データは
次のようにresults ["boxes"]に配置されていることがわかりまし
た。ディクショナリ結果の出力値["boxes"] [0] [1]は類似性であり、残りはこれら2つの座標を介した画像マークの2つの座標点、つまり左上隅と右下隅です。クリックビデオストリーム内のオブジェクトをマークして選択します。
次のコードは、類似点と座標点を抽出する方法です。

 sim1 = results["boxes"][0][1]  # 相似度0.8213138,
                left_up_x1 = results["boxes"][0][2]  # x轴,左上(左上为零点)10.143881   ,
                right_down_x1 = results["boxes"][0][4]  # x轴,左上(左上为零点)44.352264
                left_up_y1 = results["boxes"][0][3]  # y轴,右下(左上为零点)294.28348
                right_down_y1 = results["boxes"][0][5]  # y轴,右下(左上为零点)328.0142

ああ、好きなことを忘れないでください

おすすめ

転載: blog.csdn.net/weixin_43134049/article/details/108170667