PratUshh
Posts: 9
Joined: Sun Apr 15, 2018 2:37 pm

Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Tue Apr 24, 2018 9:09 am

Basically Im very new to linux systems and an, above average in python, I intended to make a program that detect hand gesture (high five , victory one,three etc) , I created my own test code that doeast work since then I trien different codes from many people they all are stopping at same point that is cant import cv2 , due to following:

Code: Select all

from .cv2 import * ImportError: libQtTest.so.4: cannot open shared object file: No such file or directory
before

Code: Select all

libQtTest 
, it was showing

Code: Select all

libatlas 
, which i installed , then it asked for

Code: Select all

libjasper
, which I installed , but now cant find libQtTest.

For now Im trying to remove this error on following code, but it does shows the same error in other codes too, Ive thrice updated my pi.

Code: Select all

import cv2
import numpy as np
import time

#Open Camera object
cap = cv2.VideoCapture(0)

#Decrease frame size
cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 1000)
cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 600)

def nothing(x):
    pass

# Function to find angle between two vectors
def Angle(v1,v2):
 dot = np.dot(v1,v2)
 x_modulus = np.sqrt((v1*v1).sum())
 y_modulus = np.sqrt((v2*v2).sum())
 cos_angle = dot / x_modulus / y_modulus
 angle = np.degrees(np.arccos(cos_angle))
 return angle

# Function to find distance between two points in a list of lists
def FindDistance(A,B): 
 return np.sqrt(np.power((A[0][0]-B[0][0]),2) + np.power((A[0][1]-B[0][1]),2)) 
 

# Creating a window for HSV track bars
cv2.namedWindow('HSV_TrackBar')

# Starting with 100's to prevent error while masking
h,s,v = 100,100,100

# Creating track bar
cv2.createTrackbar('h', 'HSV_TrackBar',0,179,nothing)
cv2.createTrackbar('s', 'HSV_TrackBar',0,255,nothing)
cv2.createTrackbar('v', 'HSV_TrackBar',0,255,nothing)

while(1):

    #Measure execution time 
    start_time = time.time()
    
    #Capture frames from the camera
    ret, frame = cap.read()
    
    #Blur the image
    blur = cv2.blur(frame,(3,3))
 	
 	#Convert to HSV color space
    hsv = cv2.cvtColor(blur,cv2.COLOR_BGR2HSV)
    
    #Create a binary image with where white will be skin colors and rest is black
    mask2 = cv2.inRange(hsv,np.array([2,50,50]),np.array([15,255,255]))
    
    #Kernel matrices for morphological transformation    
    kernel_square = np.ones((11,11),np.uint8)
    kernel_ellipse= cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
    
    #Perform morphological transformations to filter out the background noise
    #Dilation increase skin color area
    #Erosion increase skin color area
    dilation = cv2.dilate(mask2,kernel_ellipse,iterations = 1)
    erosion = cv2.erode(dilation,kernel_square,iterations = 1)    
    dilation2 = cv2.dilate(erosion,kernel_ellipse,iterations = 1)    
    filtered = cv2.medianBlur(dilation2,5)
    kernel_ellipse= cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(8,8))
    dilation2 = cv2.dilate(filtered,kernel_ellipse,iterations = 1)
    kernel_ellipse= cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
    dilation3 = cv2.dilate(filtered,kernel_ellipse,iterations = 1)
    median = cv2.medianBlur(dilation2,5)
    ret,thresh = cv2.threshold(median,127,255,0)
    
    #Find contours of the filtered frame
    contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)   
    
    #Draw Contours
    #cv2.drawContours(frame, cnt, -1, (122,122,0), 3)
    #cv2.imshow('Dilation',median)
    
	#Find Max contour area (Assume that hand is in the frame)
    max_area=100
    ci=0	
    for i in range(len(contours)):
        cnt=contours[i]
        area = cv2.contourArea(cnt)
        if(area>max_area):
            max_area=area
            ci=i  
            
	#Largest area contour 			  
    cnts = contours[ci]

    #Find convex hull
    hull = cv2.convexHull(cnts)
    
    #Find convex defects
    hull2 = cv2.convexHull(cnts,returnPoints = False)
    defects = cv2.convexityDefects(cnts,hull2)
    
    #Get defect points and draw them in the original image
    FarDefect = []
    for i in range(defects.shape[0]):
        s,e,f,d = defects[i,0]
        start = tuple(cnts[s][0])
        end = tuple(cnts[e][0])
        far = tuple(cnts[f][0])
        FarDefect.append(far)
        cv2.line(frame,start,end,[0,255,0],1)
        cv2.circle(frame,far,10,[100,255,255],3)
    
	#Find moments of the largest contour
    moments = cv2.moments(cnts)
    
    #Central mass of first order moments
    if moments['m00']!=0:
        cx = int(moments['m10']/moments['m00']) # cx = M10/M00
        cy = int(moments['m01']/moments['m00']) # cy = M01/M00
    centerMass=(cx,cy)    
    
    #Draw center mass
    cv2.circle(frame,centerMass,7,[100,0,255],2)
    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(frame,'Center',tuple(centerMass),font,2,(255,255,255),2)     
    
    #Distance from each finger defect(finger webbing) to the center mass
    distanceBetweenDefectsToCenter = []
    for i in range(0,len(FarDefect)):
        x =  np.array(FarDefect[i])
        centerMass = np.array(centerMass)
        distance = np.sqrt(np.power(x[0]-centerMass[0],2)+np.power(x[1]-centerMass[1],2))
        distanceBetweenDefectsToCenter.append(distance)
    
    #Get an average of three shortest distances from finger webbing to center mass
    sortedDefectsDistances = sorted(distanceBetweenDefectsToCenter)
    AverageDefectDistance = np.mean(sortedDefectsDistances[0:2])
 
    #Get fingertip points from contour hull
    #If points are in proximity of 80 pixels, consider as a single point in the group
    finger = []
    for i in range(0,len(hull)-1):
        if (np.absolute(hull[i][0][0] - hull[i+1][0][0]) > 80) or ( np.absolute(hull[i][0][1] - hull[i+1][0][1]) > 80):
            if hull[i][0][1] <500 :
                finger.append(hull[i][0])
    
    #The fingertip points are 5 hull points with largest y coordinates  
    finger =  sorted(finger,key=lambda x: x[1])   
    fingers = finger[0:5]
    
    #Calculate distance of each finger tip to the center mass
    fingerDistance = []
    for i in range(0,len(fingers)):
        distance = np.sqrt(np.power(fingers[i][0]-centerMass[0],2)+np.power(fingers[i][1]-centerMass[0],2))
        fingerDistance.append(distance)
    
    #Finger is pointed/raised if the distance of between fingertip to the center mass is larger
    #than the distance of average finger webbing to center mass by 130 pixels
    result = 0
    for i in range(0,len(fingers)):
        if fingerDistance[i] > AverageDefectDistance+130:
            result = result +1
    
    #Print number of pointed fingers
    cv2.putText(frame,str(result),(100,100),font,2,(255,255,255),2)
    
    #show height raised fingers
    #cv2.putText(frame,'finger1',tuple(finger[0]),font,2,(255,255,255),2)
    #cv2.putText(frame,'finger2',tuple(finger[1]),font,2,(255,255,255),2)
    #cv2.putText(frame,'finger3',tuple(finger[2]),font,2,(255,255,255),2)
    #cv2.putText(frame,'finger4',tuple(finger[3]),font,2,(255,255,255),2)
    #cv2.putText(frame,'finger5',tuple(finger[4]),font,2,(255,255,255),2)
    #cv2.putText(frame,'finger6',tuple(finger[5]),font,2,(255,255,255),2)
    #cv2.putText(frame,'finger7',tuple(finger[6]),font,2,(255,255,255),2)
    #cv2.putText(frame,'finger8',tuple(finger[7]),font,2,(255,255,255),2)
        
    #Print bounding rectangle
    x,y,w,h = cv2.boundingRect(cnts)
    img = cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
    
    cv2.drawContours(frame,[hull],-1,(255,255,255),2)
    
    ##### Show final image ########
    cv2.imshow('Dilation',frame)
    ###############################
    
    #Print execution time
    #print time.time()-start_time
    
    #close the output video by pressing 'ESC'
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break


cap.release()
cv2.destroyAllWindows()

mattmiller
Posts: 2247
Joined: Thu Feb 05, 2015 11:25 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Tue Apr 24, 2018 10:12 am

How did you install OpenCV on your Pi?

PratUshh
Posts: 9
Joined: Sun Apr 15, 2018 2:37 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Tue Apr 24, 2018 4:46 pm

mattmiller wrote:
Tue Apr 24, 2018 10:12 am
How did you install OpenCV on your Pi?
I ran following:

Code: Select all

pi@raspberrypi:~ $ sudo apt-get install python-opencv
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python-opencv is already the newest version (2.4.9.1+dfsg1-2).
The following packages were automatically installed and are no longer required:
  gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 gir1.2-keybinder-3.0
  gir1.2-wnck-3.0 gnome-session-canberra gstreamer1.0-pulseaudio
  libkeybinder-3.0-0 python3-cairo python3-gi-cairo
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 13 not upgraded.

User avatar
DougieLawson
Posts: 42483
Joined: Sun Jun 16, 2013 11:19 pm
Location: A small cave in deepest darkest Basingstoke, UK

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Tue Apr 24, 2018 4:49 pm

Try sudo apt install python3-opencv
Languages using left-hand whitespace for syntax are ridiculous

DMs sent on https://twitter.com/DougieLawson or LinkedIn will be answered next month.
Fake doctors - are all on my foes list.

The use of crystal balls and mind reading is prohibited.

PratUshh
Posts: 9
Joined: Sun Apr 15, 2018 2:37 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Tue Apr 24, 2018 4:52 pm

DougieLawson wrote:
Tue Apr 24, 2018 4:49 pm
Try sudo apt install python3-opencv
it says:

Code: Select all

pi@raspberrypi:~ $ sudo apt install python3-opencv
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package python3-opencv

User avatar
DougieLawson
Posts: 42483
Joined: Sun Jun 16, 2013 11:19 pm
Location: A small cave in deepest darkest Basingstoke, UK

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Tue Apr 24, 2018 5:14 pm

Sorry, it's another of the common python2 vs python3 complete messes.

You'll have to write your code using python2 or you'll have to build OpenCV from source for python3.
Languages using left-hand whitespace for syntax are ridiculous

DMs sent on https://twitter.com/DougieLawson or LinkedIn will be answered next month.
Fake doctors - are all on my foes list.

The use of crystal balls and mind reading is prohibited.

PratUshh
Posts: 9
Joined: Sun Apr 15, 2018 2:37 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Tue Apr 24, 2018 5:16 pm

DougieLawson wrote:
Tue Apr 24, 2018 5:14 pm
Sorry, it's another of the common python2 vs python3 complete messes.

You'll have to write your code using python2 or you'll have to build OpenCV from source for python3.
and how to do latter one ? OpenCV from python3 ? outlines atleast ?

User avatar
B.Goode
Posts: 14829
Joined: Mon Sep 01, 2014 4:03 pm
Location: UK

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Tue Apr 24, 2018 5:28 pm

An internet search tool, given the task raspbian stretch opencv python3 install returned:

https://www.pyimagesearch.com/2017/09/0 ... pberry-pi/

I can't vouch for it being accurate, but at least it has been updated to Raspbian Stretch from earlier releases of the OS.

PratUshh
Posts: 9
Joined: Sun Apr 15, 2018 2:37 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Wed Apr 25, 2018 1:22 pm

B.Goode wrote:
Tue Apr 24, 2018 5:28 pm
An internet search tool, given the task raspbian stretch opencv python3 install returned:

https://www.pyimagesearch.com/2017/09/0 ... pberry-pi/

I can't vouch for it being accurate, but at least it has been updated to Raspbian Stretch from earlier releases of the OS.
Aint working for me, tried almost everything. Should I clean install raspbian ? would that work ? of what can be done ? I HAVE to clear this problem before next 3 days anyhow, else m dead, :P :!: :(

User avatar
B.Goode
Posts: 14829
Joined: Mon Sep 01, 2014 4:03 pm
Location: UK

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Wed Apr 25, 2018 1:53 pm

Is using Python3 an absolute requirement?

(Normally I'd say "use Python3 by default", but availability of supporting libraries is one of the genuine reasons to make an exception.)

PratUshh
Posts: 9
Joined: Sun Apr 15, 2018 2:37 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Sun Apr 29, 2018 3:12 pm

B.Goode wrote:
Wed Apr 25, 2018 1:53 pm
Is using Python3 an absolute requirement?

(Normally I'd say "use Python3 by default", but availability of supporting libraries is one of the genuine reasons to make an exception.)
No, its not absolute requirement but the most recommended one.

PratUshh
Posts: 9
Joined: Sun Apr 15, 2018 2:37 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Sun Apr 29, 2018 3:17 pm

I Uninstalled and reinstalled icv using this :

http://www.life2coding.com/install-open ... erry-pi-3/

but at step 10, verification its saying :

Code: Select all

>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pi/.local/lib/python3.5/site-packages/cv2/__init__.py", line 4, in <module>
    from .cv2 import *
ImportError: libQtTest.so.4: cannot open shared object file: No such file or directory
WHAT TO DO , I've got a dead line, n m stuck solving this cv! my program is ready and working on any PC, but this Pi cant import cv and making everything pause.

mattmiller
Posts: 2247
Joined: Thu Feb 05, 2015 11:25 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Mon Apr 30, 2018 6:13 am

I just went thru those instructions and they work for me on a Pi3B+ with 2018-04-18 full Raspbian setup

Code: Select all

pi@s18apr18:/usr/local/lib/python3.5/dist-packages $ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.0'
>>> 
I did vary them slightly as I did not change the swapfile size and just used the single core make (not make -j4) and left it overnight to complete

mhassine
Posts: 1
Joined: Sat May 05, 2018 7:25 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Sun May 06, 2018 6:19 am

Following the same set of instructions i got it to work, but ONLY in the forder dist-packages:

pi@raspberrypi:/usr/local/lib/python3.5/dist-packages $ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.0'
>>> import numpy
>>> print (numpy.version.version)
1.14.3
>>> quit()

On any other folder I get the sam libQTest issue...

pi@raspberrypi:/usr/local/lib/python3.5/dist-packages $ cd ..
pi@raspberrypi:/usr/local/lib/python3.5 $ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/pi/.local/lib/python3.5/site-packages/cv2/__init__.py", line 4, in <module>
from .cv2 import *
ImportError: libQtTest.so.4: cannot open shared object file: No such file or directory
>>> quit()

And running the python with root privileges gives something new...

pi@raspberrypi:/usr/local/lib/python3.5 $ sudo python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xa
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: numpy.core.multiarray failed to import
>>>

Any ideas ?

mattmiller
Posts: 2247
Joined: Thu Feb 05, 2015 11:25 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Mon May 07, 2018 10:02 am

I don't know if this helps but I get

Code: Select all

>>> import numpy
>>> print (numpy.version.version)
1.12.1
>>> 
and not 1.14.2 that your system seem to have which makes me think you did something different or extra

If you can restart the process with a clean image and see if works for you then?

sedhha
Posts: 2
Joined: Fri May 11, 2018 9:36 am

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Wed Jun 20, 2018 2:38 am

use this:

Code: Select all

pip3 install opencv-python
sudo apt install libqt4-test
Expecting you are using raspbian stretch, with libraries already installed this is definitely gonna help.

eseka
Posts: 1
Joined: Wed Nov 14, 2018 9:09 am

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Wed Nov 14, 2018 9:11 am

same issue
same brain-eater

solution:

Code: Select all

[quote]
sudo apt install libatlas3-base libsz2 libharfbuzz0b libtiff5 libjasper1 libilmbase12 libopenexr22 libilmbase12 libgstreamer1.0-0 libavcodec57 libavformat57 libavutil55 libswscale4 libqtgui4 libqt4-test libqtcore4
sudo pip3 install opencv-contrib-python libwebp6
[/quote]
https://blog.piwheels.org/new-opencv-builds/

edit:
+ packages if not
sudo apt install libhdf5-100

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran

sebster
Posts: 1
Joined: Fri Dec 07, 2018 2:07 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Sat Dec 08, 2018 10:44 am

Specifically registered to say thanks to eseka, just above. I kept having missing dependencies and after installing what he noted it worked for me.

JovinHuang
Posts: 1
Joined: Sat Dec 29, 2018 5:34 am

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Sat Dec 29, 2018 5:37 am

Well [ sudo apt install libqt4-test][/code] works for me !

HATHEMI
Posts: 35
Joined: Tue Aug 16, 2016 9:08 pm

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Wed Jan 22, 2020 10:06 pm

i have tried ton install too many packages but still always get the same error

Code: Select all

   import cv2
  File "/home/pi/.local/lib/python3.5/site-packages/cv2/__init__.py", line 9, in <module>
    from .cv2 import *
ImportError: libhdf5_serial.so.100: cannot open shared object file: No such file or directory
any solution PLEASE ?

StephanChang
Posts: 1
Joined: Wed May 13, 2020 1:38 am

Re: Cant Import cv2 (Pi 3 Mobel B) Python 3.5

Wed May 13, 2020 1:41 am

raspberry pi doesn't work with newest version of opencv, try sudo pip3 install opencv-python==3.4.6.27. Thanks to Zach-OP https://github.com/EdjeElectronics/Tens ... /issues/67

Return to “Python”