2017-01-31 3 views
2

私はUbuntuでpythonファイルを実行しようとしています。しかし、それは実行されていないと私はいずれかのエラーメッセージを取得していません。 whileループはLinuxでは動作しませんが、ウィンドウで動作していますPythonファイルがLinuxで実行されていません - OpenCV isOpened()issue

#!/usr/bin/env python 
import cv2 
import numpy as np 
import math 
cap = cv2.VideoCapture(0) 

while(cap.isOpened()): 
    ret, img = cap.read() 
    cv2.rectangle(img,(300,300),(100,100),(0,255,0),0) 
    crop_img = img[100:300, 100:300] 
    grey = cv2.cvtColor(crop_img, cv2.COLOR_BGR2GRAY) 
    value = (35, 35) 
    blurred = cv2.GaussianBlur(grey, value, 0) 
    _, thresh1 = cv2.threshold(blurred, 127, 255, 
          cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) 
    cv2.imshow('Thresholded', thresh1) 

    (version, _, _) = cv2.__version__.split('.') 

    if version is '3': 
     image, contours, hierarchy = cv2.findContours(thresh1.copy(), \ 
       cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) 
    elif version is '2': 
     contours, hierarchy = cv2.findContours(thresh1.copy(),cv2.RETR_TREE, \ 
      cv2.CHAIN_APPROX_NONE) 

    cnt = max(contours, key = lambda x: cv2.contourArea(x)) 

    x,y,w,h = cv2.boundingRect(cnt) 
    cv2.rectangle(crop_img,(x,y),(x+w,y+h),(0,0,255),0) 
    hull = cv2.convexHull(cnt) 
    drawing = np.zeros(crop_img.shape,np.uint8) 
    cv2.drawContours(drawing,[cnt],0,(0,255,0),0) 
    cv2.drawContours(drawing,[hull],0,(0,0,255),0) 
    hull = cv2.convexHull(cnt,returnPoints = False) 
    defects = cv2.convexityDefects(cnt,hull) 
    count_defects = 0 
    cv2.drawContours(thresh1, contours, -1, (0,255,0), 3) 
    for i in range(defects.shape[0]): 
     s,e,f,d = defects[i,0] 
     start = tuple(cnt[s][0]) 
     end = tuple(cnt[e][0]) 
     far = tuple(cnt[f][0]) 
     a = math.sqrt((end[0] - start[0])**2 + (end[1] - start[1])**2) 
     b = math.sqrt((far[0] - start[0])**2 + (far[1] - start[1])**2) 
     c = math.sqrt((end[0] - far[0])**2 + (end[1] - far[1])**2) 
     angle = math.acos((b**2 + c**2 - a**2)/(2*b*c)) * 57 
     if angle <= 90: 
      count_defects += 1 
      cv2.circle(crop_img,far,1,[0,0,255],-1) 
     #dist = cv2.pointPolygonTest(cnt,far,True) 
     cv2.line(crop_img,start,end,[0,255,0],2) 
     #cv2.circle(crop_img,far,5,[0,0,255],-1) 
    if count_defects == 1: 
     cv2.putText(img,"I am Vipul", (50,50), cv2.FONT_HERSHEY_SIMPLEX, 2, 2) 
    elif count_defects == 2: 
     str = "This is a basic hand gesture recognizer" 
     cv2.putText(img, str, (5,50), cv2.FONT_HERSHEY_SIMPLEX, 1, 2) 
    elif count_defects == 3: 
     cv2.putText(img,"This is 4 :P", (50,50), cv2.FONT_HERSHEY_SIMPLEX, 2, 2) 
    elif count_defects == 4: 
     cv2.putText(img,"Hi!!!", (50,50), cv2.FONT_HERSHEY_SIMPLEX, 2, 2) 
    else: 
     cv2.putText(img,"Hello World!!!", (50,50),\ 
       cv2.FONT_HERSHEY_SIMPLEX, 2, 2) 
    cv2.imshow('Gesture', img) 
    all_img = np.hstack((drawing, crop_img)) 
    cv2.imshow('Contours', all_img) 
    k = cv2.waitKey(10) 
    if k == 27: 
     break 

[email protected]:~/Desktop/Handgesture$ python BasicHandgesture.py 
[email protected]:~/Desktop/Handgesture$ python 
Python 2.7.12 |Anaconda 4.2.0 (64-bit)| (default, Jul 2 2016, 17:42:40) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
Anaconda is brought to you by Continuum Analytics. 
Please check out: http://continuum.io/thanks and https://anaconda.org 
>>> import cv2 
>>> 
KeyboardInterrupt 
>>> 
[email protected]:~/Desktop/Handgesture$ python BasicHandgesture.py 
[email protected]:~/Desktop/Handgesture$ 

私のコードはこれです。 ご迷惑をおかけして申し訳ございません。

+0

'BasicHandgesture.py'は実際に実行するコードを持っていますか?それとも、クラスや関数のみを含んでいますか? また、 'python BasicHandgesture.py'が実際にエラーなしで実行されたかどうかを確認するために' echo $? 'を実行して戻りコードが何であるかを確認してください。 – Srikanth

+3

私たちは 'BasicHandgensture.py'のソースコードを持っていないので、それは(近い)答えが不可能だと思います。コードにini(またはexit(0) 'のようなもの)がない場合、正常に動作しています。 –

+0

問題はあなたのpythonが設定されているのではなく、スクリプトのようです。ソースコードを表示してください。 – spicypumpkin

答えて

0

バーチャルボックスで問題が発生しました。 @RamはAs Asと述べた。私はVideoCapture()のソースを変更し、今すぐ動作します。

関連する問題