PlaidML plaidvision - eiichiromomma/CVMLAB GitHub Wiki

(PlaidML) plaidvision

PlaidMLを使った物体認識のサンプル

導入

配布元に書かれている通り。PlaidML導入済みの仮想環境で

git clone https://github.com/plaidml/plaidvision
cd plaidvision
pip install -r requirements.txt

で導入完了

物体認識

python plaidvision.py

を実行すると

pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
usage: plaidvision.py [-h] [--plaid | --no-plaid] [--fp16] [-v [VERBOSE]]
                      [--input INPUT] [--output OUTPUT] [--json JSON]
                      [--headless] [--weights WEIGHTS] [--frames FRAMES]
                      {inception_v3,mobilenet,resnet50,vgg16,vgg19,xception}
plaidvision.py: error: the following arguments are required: model

に出てくる通りで

  • inception_v3
  • mobilenet
  • resnet50
  • vgg16
  • vgg19
  • xception

からモデルを選べる。例えばxceptionの場合

python plaidvision.py --plaid xception

で起動する。

metal_amd_radeon_r9_m380.0の環境で

VGAで10fpsくらいは出る。

なお,WebCAMが複数ある場合はinputオプションで指定できる筈だが,macOSの場合デバイスのパス指定は面倒なのでplaidvision.pyの

class Input:

    def __init__(self, path, stop):
        self.path = path
        self.count = 0
        self.stop = stop

    def open(self):
        if self.path:
            self.cap = cv2.VideoCapture(self.path)
        else:
            self.cap = cv2.VideoCapture(0)

のVideoCapture(0)の数字を書き換えれば良い。あるいはself.pathが数字か判断して数字だったらintにすれば--input 1みたいな指定が出来る。 雑だが下記のようにすればデバイス番号指定でいける。

--- a/plaidvision.py
+++ b/plaidvision.py
@@ -71,7 +71,10 @@ class Input:

     def open(self):
         if self.path:
-            self.cap = cv2.VideoCapture(self.path)
+            if self.path.isdigit():
+                self.cap = cv2.VideoCapture(int(self.path))
+            else:
+                self.cap = cv2.VideoCapture(self.path)
         else:
             self.cap = cv2.VideoCapture(0)
         self.cap.set(CAP_PROP_FRAME_WIDTH, CAP_WIDTH)