You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

face_recognition库读取CSV中人脸编码时触发_UFuncNoLoopError错误求助

face_recognition库读取CSV中人脸编码时触发_UFuncNoLoopError错误求助

看起来你遇到的问题核心是从CSV读取人脸编码时,把原本的数值数组当成字符串读进来了,导致numpy无法对字符串和float数组做减法运算,才抛出这个_UFuncNoLoopError错误。

错误原因分析

看报错信息里的dtype('<U2080'), dtype('float64'):

  • <U2080表示你的knownEncodedList里的元素是Unicode字符串类型
  • 而encodeFaceF是face_recognition返回的float64数值数组
    numpy的减法操作没法在这两种类型之间执行,所以触发了错误。

问题出在你读取CSV编码列的代码上:

encode = np.array(col[1])

CSV里存储的编码是字符串格式(比如类似"0.123,-0.456,..."),直接转成numpy数组只会得到一个单元素的字符串数组,不是我们需要的128维数值数组。

解决方案

需要分两步修正:正确写入编码到CSV + 正确从CSV读取编码

1. 先修正人脸编码的写入逻辑(步骤1的代码)

确保写入CSV时,把128维的人脸编码数组转成逗号分隔的字符串,而不是直接存数组的默认打印形式:

import csv
import face_recognition as fr

# 假设你已经有了名字列表names和对应的编码列表face_encodings
with open('Facial Data.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(['Name', 'Encoding'])  # 写入表头
    for name, encoding in zip(names, face_encodings):
        # 将编码数组转成逗号分隔的字符串
        encoding_str = ','.join(map(str, encoding))
        writer.writerow([name, encoding_str])

2. 修正读取CSV的逻辑(步骤2的代码)

读取编码列时,把字符串按逗号分割,转成float列表后再转成numpy数组:

knownEncodedList = []
name_of_people = []

with open('Facial Data.csv') as data :
    data = csv.reader(data)
    next(data)  # 跳过表头
    for col in data :
        name_of_people.append(col[0])
        # 解析编码字符串为float数组
        enc_values = list(map(float, col[1].split(',')))
        encode = np.array(enc_values)
        knownEncodedList.append(encode)

更简洁的方式(用pandas)

如果你的环境安装了pandas,读取会更方便:

import pandas as pd
import numpy as np

df = pd.read_csv('Facial Data.csv')
name_of_people = df['Name'].tolist()
# 解析编码列
knownEncodedList = df['Encoding'].apply(lambda x: np.array(list(map(float, x.split(','))))).tolist()

验证修改效果

修改后,你可以打印type(knownEncodedList[0])和knownEncodedList[0].dtype,应该会得到<class 'numpy.ndarray'>和float64,和encodeFaceF的类型一致,此时再调用fr.compare_faces就不会报错了。

备注:内容来源于stack exchange,提问作者Zahin Fyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:10:29