RuntimeError:具有形状集的预期可写numpy.ndarray

时间:2018-04-23 03:58:52

标签: python apache-spark pyspark face-recognition dlib

我尝试将一些图像加载到RDD中并使用面部识别库(https://github.com/ageitgey/face_recognition)来比较不同的图像。以下代码工作

import face_recognition
import numpy as np
from io import BytesIO
from PIL import Image
from pyspark import SparkContext


sc = SparkContext(appName="LoadingImage")
images = sc.binaryFiles("./images/")
image_to_array = lambda rawdata: np.asarray(Image.open(BytesIO(rawdata)))
i_arr = images.values().map(image_to_array)    
new_encoding = face_recognition.face_encodings(i_arr.first())
next_encoding = face_recognition.face_encodings(i_arr.first())
result = face_recognition.compare_faces([new_encoding[0]], next_encoding[0])
print(result)

但是,当我尝试将face_encodings函数映射到RDD中的所有元素时,它总是给我一个错误:

  

RuntimeError:预期的可写numpy.ndarray,其形状设置为。

img_to_encodings = lambda img: face_recognition.face_encodings(img)[0]
i_arrm = i_arr.map(img_to_encodings)
result = face_recognition.compare_faces([i_arrm.first()], i_arrm.first())
print(result)

错误来自dlib库,但我认为我做错了火花。不知道怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

picamera返回的帧已将标志设置为false,即可写:False。 将frame flag设置为true,以便face_recognition包可以使用它。代码段:

SELECT count(*) FROM information_schema.columns
   WHERE table_name = 'tablename' AND column_name = 'columnname';

演示代码看看:

image.setflags(write=True)