python怎么将表情识别系统的最后的识别结果截取数据并存入数据库 是将定义的字符串截取出来吗?
是的,你可以通过字符串的截取功能,将表情识别系统的最后的识别结果截取出来并且存入数据库中。下面是一个简单的示例:
假设你的最后的识别结果为一个字符串,例如:result = "这是一张开心的表情"
首先,你需要将结果字符串中的表情部分截取出来,可以使用正则表达式,示例如下:
import re
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols&pics
u"\U0001F680-\U0001F6FF" # transport&map
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"]+", flags=re.UNICODE)
emojis = emoji_pattern.findall(result)
这段代码使用了正则表达式,找出了结果字符串中的表情部分,并将其存入一个列表emojis
中。
接下来,你可以将emojis
列表中的表情部分作为一条记录存入数据库中。比如使用Python自带的SQLite数据库,示例如下:
import sqlite3
# 连接数据库,如果不存在,则会创建一个新的数据库
conn = sqlite3.connect('my_database.db')
# 创建一个游标对象
cursor = conn.cursor()
# 创建一张表存储表情记录
cursor.execute('create table emojis(id integer primary key, emoji text)')
# 遍历emojis列表,并将每个表情存入表中
for i, e in enumerate(emojis):
cursor.execute('insert into emojis(id, emoji) values(?, ?)', (i, e))
# 提交更改,关闭游标和数据库连接
conn.commit()
cursor.close()
conn.close()
这段代码使用了sqlite3模块,连接到了一个名为my_database.db的数据库,并在其中创建了一个名为emojis的表,用于存储表情记录。然后,通过遍历emojis
列表,将其中的每个表情存入表中。
当然,以上代码示例仅供参考,具体的实现代码需要根据你的需求进行相应的修改和调整。
下面是效果图,打开你的编辑器跟着我写的代码实践吧,你的赞和关注是我持续分享的动力。
"""
@author 李韬——知乎@Ai酱
教程地址:https://blog.csdn.net/varyshare/article/details/96885179
"""
import numpy as np
from numpy import cos, sin, arccos, arctan2, sqrt
import matplotlib.pyplot as plt
(target_x,target_y) = (1,1) # 机器人要到达的目标点
class TwoLinkArm:
"""
两连杆手臂模拟。
所使用的变量与模拟实体对应关系如下所示:
(joint0)——连杆0——(joint1)——连杆1——[joint2]
注意:joint0是基座也是坐标原点(0,0)
"""
def __init__(self, _joint_angles=[0, 0]):
# 第0个关节是基座所以坐标固定是原点(0,0)
self.joint0 = np.array([0, 0])
# 机器人两段连杆(手臂)的长度
self.link_lengths = [1, 1]
self.update_joints(_joint_angles)
def update_joints(self, _joint_angles):
self.joint_angles = _joint_angles
self.forward_kinematics()
def forward_kinematics(self):
"""
根据各个关节角计算各个关节的位置.
注意:所使用的变量与模拟实体对应关系如下所示:
(joint0)——连杆0——(joint1)——连杆1——[joint2]
"""
# 计算关节1的位置
# q0,q1分别是第0和第1个关节的关节角
q0 = self.joint_angles[0]
a0 = self.link_lengths[0]
self.joint1 = self.joint0 + [a0 * cos(q0), a0 * sin(q0)]
# 计算关节2的位置
q1 = self.joint_angles[1]
a1 = self.link_lengths[1]
# 注意:q1是杆1相对于杆0的延长线的转角,而杆0相对水平线的转角是q0
# 所以杆1相对水平线的转角是(q0+q1), 而joint2是杆1的末端
self.joint2 = self.joint1 + [a1 * cos(q0 + q1), a1 * sin(q0 + q1)]
def plot(self):
"""
绘制当前状态下的机械臂
"""
# 清理坐标系中的内容
plt.cla()
# 三个关节的坐标
x = [self.joint0[0], self.joint1[0], self.joint2[0]]
y = [self.joint0[1], self.joint1[1], self.joint2[1]]
# 绘制这样的一条线——连杆0————连杆1——
plt.plot(x, y, c="red", zorder=1)
# 绘制三个黑圆点代表关节,zorder=2是为了让绘制的点盖在直线上面
plt.scatter(x, y, c="black", zorder=2)
# 绘制目标点
global target_x,target_y
plt.scatter(target_x,target_y,c='blue',marker='*')
# 固定住坐标系,
# 不让它乱变,不让我点击的坐标和它显示的坐标不是一个坐标
plt.xlim(-2, 2)
plt.ylim(-2, 2)
def inverse_kinematic(self, x, y):
"""
逆运动学求解要达到(x,y)需要转动的角度,
返回机器人各关节需要转动的角度
"""
a0 = self.link_lengths[0]
a1 = self.link_lengths[1]
q1 = arccos((x ** 2 + y ** 2 - a0 ** 2 - a1 ** 2) / (2 * a0 * a1))
q0 = arctan2(y, x) - arctan2(a1 * sin(q1), a1 * cos(q1) + a0)
return [q0, q1]
def animation(self,x,y):
_joint_angles = self.inverse_kinematic(x, y)
# 将这个角度变化过程分解成一个1s内的执行15步的慢动作
duration_time_seconds = 1
actions_num = 15
angles_per_action = (np.array(_joint_angles) - np.array(self.joint_angles))/actions_num
plt.ion() # 开启交互模式不然没有动画效果
for action_i in range(actions_num):
self.joint_angles = np.array(self.joint_angles) + angles_per_action
self.update_joints(self.joint_angles)
self.plot()
dt = duration_time_seconds/actions_num
plt.pause(dt)
def to_mouse_posi(self,event):
"""
鼠标点击事件处理函数:记录鼠标在坐标系中的位置(x,y)
然后将其设置为机器人要到达的目标点
"""
global target_x, target_y
if event.xdata == None or event.ydata == None:
print("请在坐标系内选择一个点")
return
target_x = event.xdata
target_y = event.ydata
self.animation(target_x,target_y)
# ---------------------------------
def main():
fig = plt.figure()
arm_robot = TwoLinkArm()
arm_robot.animation(target_x,target_y)
fig.canvas.mpl_connect("button_press_event", arm_robot.to_mouse_posi)
plt.ioff() # 一定要终止交互模式不然会一闪而过
plt.show()
if __name__ == "__main__":
main()
pass
参考文献:
[1] https://robotacademy.net.au/lesson/inverse-kinematics-for-a-2-joint-robot-arm-using-geometry/
可以使用第三方库OpenCV来实现表情识别系统并将最后的识别结果截取数据存入数据库。
需要安装OpenCV和Python的数据库连接驱动程序
pip install opencv-python
pip install mysql-connector-python
编写代码来实现识别表情并将结果存储到数据库中。以下是一个简单的示例代码:
import cv2
import mysql.connector
# 连接数据库
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='your_host', database='your_database')
cursor = cnx.cursor()
# 加载表情分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
smile_cascade = cv2.CascadeClassifier('haarcascade_smile.xml')
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取一帧图像
ret, frame = cap.read()
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 对每个人脸进行处理
for (x,y,w,h) in faces:
# 截取人脸图像
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
# 检测眼睛
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
# 检测微笑
smiles = smile_cascade.detectMultiScale(roi_gray, scaleFactor=1.7, minNeighbors=22, minSize=(25, 25))
for (sx,sy,sw,sh) in smiles:
# 保存最后的识别结果
result = "Smiling"
cv2.rectangle(roi_color,(sx,sy),(sx+sw,sy+sh),(0,0,255),2)
# 显示图像
cv2.imshow('frame',frame)
# 按下q键退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 关闭摄像头
cap.release()
cv2.destroyAllWindows()
# 将最后的识别结果存储到数据库中
query = "INSERT INTO emotions (emotion) VALUES (%s)"
values = (result,)
cursor.execute(query, values)
cnx.commit()
# 关闭数据库连接
cursor.close()
cnx.close()
这个代码使用OpenCV来检测人脸、眼睛和微笑,并将最后的识别结果存储到MySQL数据库中。