【发布时间】:2021-12-14 10:20:40
【问题描述】:
我正在使用 python 模块 'face_recognition' 和 'pickle' 和 DB 'PostgreSQL' 从数据库中保存和检索我的面部矢量,但我遇到了编码问题。
如果未启用 UTF-8 编码,我将无法保存规范字符 '????'到我的数据库。
启用 UTF-8 编码后,我无法从数据库中取回我的对象。
import cv2
import pickle
import face_recognition
import mysql.connector as mysql
conn = mysql.connect(
host = 'localhost',
user = 'root',
passwd = 'superpassword'
)
# Open image
img = face_recognition.load_image_file('test.jpg')
# Get vector
face_vector = face_recognition.face_encodings(img)[0]
cur = conn.cursor(buffered=True)
cur.execute("CREATE DATABASE IF NOT EXISTS test;")
cur.execute("USE test;")
# WITHOUT UTF-8 I GETTING THIS ERROR:
# Error: mysql.connector.errors.DataError: 1366 (22007): Incorrect string value: '\xF0\x9D\x95\xB2' for column `test`.`test`.`bug_char` at row 1
#cur.execute("SET NAMES 'utf8';")
#cur.execute("SET CHARACTER SET utf8;")
cur.execute("CREATE TABLE faces(bug_char VARCHAR(32), vectors BLOB)")
data_insert = ('????', pickle.dumps(face_vector))
cur.execute('INSERT INTO faces(bug_char, vectors) VALUES(%s, %s)', data_insert)
cur.execute("SELECT * FROM faces;")
face_data = cur.fetchall()
for f in face_data:
print(pickle.loads(f[1]))
# AND WITH UTF-8 I GETTING THIS ERROR WHEN I TRY TO GET MY OBJ FROM DB:
'''
Traceback (most recent call last):
File "/home/user/Desktop/parser_steam/image_recognition/test/./test.py", line 203, in <module>
print(pickle.loads(f[1]))
_pickle.UnpicklingError: invalid load key, '?'.
'''
对不起我的英语。
【问题讨论】:
-
????是“MATHEMATICAL BOLD FRAKTUR CAPITAL G”,它需要 utf8mb4,而不是 utf8。或者是BINARY或BLOB的列。
标签: mysql python-3.x face-recognition