这个代码from feat.detector import Detector from feat.utils.io import get_test_data_path from feat.plotting import imshow import os detector = Detector( face_model="retinaface", landmark_model="mobilefacenet", au_model='xgb', emotion_model="resmasknet", facepose_model="img2pose", ) test_data_dir = get_test_data_path() single_face_img_path = os.path.join(test_data_dir, "single_face.jpg") imshow(single_face_img_path) single_face_prediction = detector.detect_image(single_face_img_path) # 筛选出 "Emotions" 的结果 emotions = [] for prediction in single_face_prediction: emotion = prediction.get("emotion") if emotion: emotions.append(emotion) # 输出 "Emotions" 的结果 print("Emotions: ", emotions),报错'str' object has no attribute 'get'
时间: 2024-03-08 14:50:59 浏览: 163
根据你提供的代码和报错信息,我猜测可能是 `detector.detect_image(single_face_img_path)` 的返回结果出现了异常,其中某些元素的类型不是字典类型,而是字符串类型(即 `str` 类型),导致在 `emotion = prediction.get("emotion")` 时出错。你可以通过添加调试信息来进一步确认这个问题,例如:
```python
for prediction in single_face_prediction:
print(f"Prediction type: {type(prediction)}")
if isinstance(prediction, dict):
emotion = prediction.get("emotion")
if emotion:
emotions.append(emotion)
else:
print(f"Invalid prediction type: {type(prediction)}")
```
这样可以输出所有预测结果的类型,以便你进一步分析问题所在。
相关问题
如何将下面的代码结果保存到csv里? from feat.detector import Detector detector = Detector( face_model="retinaface", landmark_model="mobilefacenet", au_model='xgb', emotion_model="resmasknet", facepose_model="img2pose", ) from feat.utils.io import get_test_data_path from feat.plotting import imshow import os test_data_dir = get_test_data_path() single_face_img_path = os.path.join(test_data_dir, "single_face.jpg") imshow(single_face_img_path) single_face_prediction = detector.detect_image(single_face_img_path) single_face_prediction
可以使用 Python 的 csv 模块将结果保存到 CSV 文件中。具体步骤如下:
1. 导入 csv 模块
2. 创建一个 csv 文件,可以使用 Python 的 open() 函数
3. 创建一个 csv.writer 对象,用于将数据写入 CSV 文件中
4. 将数据写入 CSV 文件中,可以使用 writerow() 函数
5. 关闭 CSV 文件,可以使用 Python 的 close() 函数
下面是一个示例代码,将 single_face_prediction 的结果保存到名为 "output.csv" 的 CSV 文件中:
```python
import csv
# 创建 CSV 文件
with open("output.csv", mode="w", newline="") as file:
# 创建 writer 对象
writer = csv.writer(file)
# 写入表头
writer.writerow(["face_id", "bbox", "landmarks", "action_units", "emotion", "face_pose"])
# 写入数据
for i, prediction in enumerate(single_face_prediction):
face_id = i + 1
bbox = prediction["bbox"]
landmarks = prediction["landmarks"]
action_units = prediction["action_units"]
emotion = prediction["emotion"]
face_pose = prediction["face_pose"]
writer.writerow([face_id, bbox, landmarks, action_units, emotion, face_pose])
# 关闭 CSV 文件
file.close()
```
请根据实际情况修改代码中的文件路径和表头。
下面的代码结果可以只输出Emotions的结果吗 from feat.detector import Detector detector = Detector( face_model="retinaface", landmark_model="mobilefacenet", au_model='xgb', emotion_model="resmasknet", facepose_model="img2pose", ) from feat.utils.io import get_test_data_path from feat.plotting import imshow import os test_data_dir = get_test_data_path() single_face_img_path = os.path.join(test_data_dir, "single_face.jpg") imshow(single_face_img_path) single_face_prediction = detector.detect_image(single_face_img_path) single_face_prediction
可以使用 Python 的 for 循环和 if 判断语句来筛选出 "Emotions" 的结果,并将其输出。具体代码如下:
```python
from feat.detector import Detector
from feat.utils.io import get_test_data_path
from feat.plotting import imshow
import os
detector = Detector(
face_model="retinaface",
landmark_model="mobilefacenet",
au_model='xgb',
emotion_model="resmasknet",
facepose_model="img2pose",
)
test_data_dir = get_test_data_path()
single_face_img_path = os.path.join(test_data_dir, "single_face.jpg")
imshow(single_face_img_path)
single_face_prediction = detector.detect_image(single_face_img_path)
# 筛选出 "Emotions" 的结果
emotions = []
for prediction in single_face_prediction:
emotion = prediction.get("emotion")
if emotion:
emotions.append(emotion)
# 输出 "Emotions" 的结果
print("Emotions: ", emotions)
```
这段代码会先输出图片结果,然后输出 "Emotions" 的结果,其中 "Emotions" 的结果可能为空列表。
阅读全文