我整夜都在寻找解决方案,或者至少是从哪里解决问题的地方,所以我在这里。
我正在用wsgi运行链接到我的Apache的Flask服务器。
我正在从用户网络摄像头恢复图片作为64位基本字符串(从URI中恢复)并将其写入临时文件中。
我正在对另一个临时文件上的用户的个人资料图片(例如Facebook)执行相同的操作。
# Decode base64 to image data
imgdataCam = stringBase64Cam.decode('base64')
imgdataPro = stringBase64Pro.decode('base64')
# Create temporary files
tempFile1 = tempfile.NamedTemporaryFile()
tempFile2 = tempfile.NamedTemporaryFile()
# Write images data in files
tmpImg1=open(tempFile1.name,'wb')
tmpImg1.write(imgdataCam)
tmpImg1.close()
tmpImg2=open(tempFile2.name,'wb')
tmpImg2.write(imgdataPro)
tmpImg2.close()
稍后,我尝试读取这些文件(临时文件仍未关闭,因此它们仍然存在)为
img1 = cv2.imread(tempFile1.name)
但是看起来好像什么都没有,我到处都做了一些打印,看起来“cv2.imread()”正在停止我的程序而没有任何错误消息。
我也尝试用PIL读取这些图像,如下所示:
pilImg1 = Image.open(tempFile1.name).convert('RGB')
ocvImg1 = np.array(pilImg1)
img1 = ocvImg1[:, :, ::-1].copy()
使用PIL,我可以读取文件,但是遇到的问题与
greyImg = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
稍后在我的程序上。
笔记本电脑上的一切运行都很好,但是一旦我将其上传到树莓派上,就会遇到这些问题。
有人可以帮我了解它的来源吗?
当我在此树莓上运行带有“python init .py”的 flask Servur时,它也运行良好。
最佳答案
我终于设法找到问题的根源。
我无法在树莓上读取文件,因为它正在使用wsgi和apache,并且没有访问这些文件的权限。我通过将以下行添加到我的apache vHost配置文件(/etc/apache2/sites-available/myapplication.conf)中来修复了问题。
WSGIDaemonProcess fbApp user=www-data group=www-data threads=2
我仍然不明白为什么Opencv没有返回任何错误。希望它能帮助遇到同样问题的人。