我整夜都在寻找解决方案,或者至少是从哪里解决问题的地方,所以我在这里。

我正在用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没有返回任何错误。希望它能帮助遇到同样问题的人。

09-18 02:47
查看更多