Skip to content

循环调用虹软python接口会崩掉 #6

Description

@AloveDL

我目前在做一个实时的人脸对比程序,我用了两个线程,第一个线程实时显示结果,第二个线程做人脸对比,年龄预测等功能,但是第二个线程总是崩掉,有时候也会报Fatal Python error: GC object already tracked这个错误,不知道什么原因
下面是我第二个线程循环调用的函数

defcompare_face(self, ):
try:
ifself.tmp_frameisnotNone:
new_img=self.tmp_frame.copy()
new_img=load_image(new_img)
image_ubytes=new_img.imageData.ctypes.data_as(POINTER(c_ubyte))
detect_faces=asf_struct.ASFMultiFaceInfo()
single_face=asf_struct.ASFSingleFaceInfo()
feature=asf_struct.ASF_FaceFeature()
detect_face_ret=asf_func.detect_face(
self.image_engine,
new_img.width,
new_img.height,
asf_common.ASVL_PAF_RGB24_B8G8R8,
image_ubytes,
byref(detect_faces)
)
ifdetect_face_ret!=0:
print("检测人脸失败:%s"% (detect_face_ret))
return0# self.lock.release()ifdetect_faces.faceNum==0:
return0else:
single_face.faceRect.left=detect_faces.faceRect[0].leftsingle_face.faceRect.top=detect_faces.faceRect[0].topsingle_face.faceRect.right=detect_faces.faceRect[0].rightsingle_face.faceRect.bottom=detect_faces.faceRect[0].bottomsingle_face.faceOrient=detect_faces.faceOrient[0]
single_face.faceDataInfo=detect_faces.faceDataInfoList[0]
get_feature_ret=asf_func.get_feature(
self.image_engine,
new_img.width,
new_img.height,
asf_common.ASVL_PAF_RGB24_B8G8R8,
image_ubytes,
byref(single_face),
asf_common.ASF_RegisterOrNot.ASF_RECOGNITION.value[0],
0,
byref(feature)
)
self.pos= [single_face.faceRect.left, single_face.faceRect.top, single_face.faceRect.right,
single_face.faceRect.bottom]
ifget_feature_ret!=0:
print("人脸特征提取失败:%s"% (get_feature_ret))
forid, feature_datainenumerate(self.feature_set):
confidenceLevel=c_float()
feature1=asf_struct.ASF_FaceFeature()
feature1.featureSize=feature.featureSizefeatureptr=np.array(feature_data).ctypes.data_as(POINTER(c_ubyte))
foriinrange(feature.featureSize):
featureptr[i] =feature_data[i]
feature1.feature=featureptrcompare_ret=asf_func.compare(
self.image_engine,
byref(feature),
byref(feature1),
byref(confidenceLevel),
asf_common.ASF_CompareModel.ASF_LIFE_PHOTO.value[0]
)
feature1=Noneifcompare_ret!=0:
print("人脸对比失败:%s"% (get_feature_ret))
ifconfidenceLevel.value>=0.8:
self.result_id=id+1breakprocess_ret=asf_func.process(
self.image_engine,
new_img.width,
new_img.height,
asf_common.ASVL_PAF_RGB24_B8G8R8,
image_ubytes,
byref(detect_faces),
self.process_mask
)
ifprocess_ret!=0:
print("初始化人脸属性失败:%s"% (process_ret))
live_info=asf_struct.ASF_LivenessInfo()
live_ret=asf_func.get_livescore(
self.image_engine,
byref(live_info)
)
iflive_ret!=0:
print("活体检测失败:%s"% (live_ret))
else:
self.is_live=live_info.isLive[0]
gender_info=asf_struct.ASFGenderInfo()
gender_ret=asf_func.get_gender(
self.image_engine,
byref(gender_info)
)
ifgender_ret!=0:
print("性别检测失败:%s"% (gender_ret))
else:
self.gender=gender_info.genderArray[0]
# 年龄检测age_info=asf_struct.ASFAgeInfo()
age_ret=asf_func.get_age(
self.image_engine,
byref(age_info)
)
ifage_ret!=0:
print("年龄检测失败:%s"% (age_ret))
else:
self.age=age_info.ageArray[0]
else:
cv2.waitKey(30)
exceptExceptionase:
print(e)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions