【机器学习实战入门项目】使用深度学习创建您自己的表情符号

深度学习项目入门——让你更接近数据科学的梦想
表情符号或头像是表示非语言暗示的方式。这些暗示已成为在线聊天、产品评论、品牌情感等的重要组成部分。这也促使数据科学领域越来越多的研究致力于表情驱动的故事讲述。
随着计算机视觉和深度学习的进步,现在可以从图像中检测人类情感。在这个深度学习项目中,我们将对人类面部表情进行分类,并过滤和映射相应的表情符号或头像。
关于数据集
面部表情识别数据集(FER2013)包含48*48像素的灰度人脸图像。这些图像中心对齐,并且占据相同的空间。该数据集包含以下类别的面部情绪:
- 0: 愤怒
- 1: 厌恶
- 2: 恐惧
- 3: 快乐
- 4: 悲伤
- 5: 惊讶
- 6: 自然
下载项目代码 数据集: 链接: 使用深度学习创建您自己的表情符号 源代码与数据集
使用深度学习创建你的表情

我们将构建一个深度学习模型来分类图像中的面部表情,然后将分类的情绪映射到表情符号或头像。
使用CNN进行面部情绪识别
在以下步骤中,我们将构建一个卷积神经网络架构,并在FER2013数据集上训练模型,以从图像中识别情绪。
-
导入库:
import numpy as np import cv2 from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D from keras.optimizers import Adam from keras.layers import MaxPooling2D from keras.preprocessing.image import ImageDataGenerator -
初始化训练和验证生成器:
train_dir = 'data/train' val_dir = 'data/test' train_datagen = ImageDataGenerator(rescale=1./255) val_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory(train_dir,target_size=(48,48),batch_size=64,color_mode="grayscale",class_mode='categorical') validation_generator = val_datagen.flow_from_directory(val_dir,target_size=(48,48),batch_size=64,color_mode="grayscale",class_mode='categorical') -
构建卷积网络架构:
emotion_model = Sequential() emotion_model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(48,48,1))) emotion_model.add(Conv2D(64, kernel_size=(3, 3), activation='relu')) emotion_model.add(MaxPooling2D(pool_size=(2, 2))) emotion_model.add(Dropout(0.25)) emotion_model.add(Conv2D(128, kernel_size=(3, 3), activation='relu')) emotion_model.add(MaxPooling2D(pool_size=(2, 2))) emotion_model.add(Conv2D(128, kernel_size=(3, 3), activation='relu')) emotion_model.add(MaxPooling2D(pool_size=(2, 2))) emotion_model.add(Dropout(0.25)) emotion_model.add(Flatten()) emotion_model.add(Dense(1024, activation='relu')) emotion_model.add(Dropout(0.5)) emotion_model.add(Dense(7, activation='softmax')) -
编译和训练模型:
emotion_model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.0001, decay=1e-6), metrics=['accuracy']) emotion_model_info = emotion_model.fit_generator(train_generator,steps_per_epoch=28709 // 64,epochs=50,validation_data=validation_generator,validation_steps=7178 // 64) -
保存模型权重:
emotion_model.save_weights('model.h5') -
使用OpenCV的haarcascade xml检测网络摄像头中人脸的边界框,并预测情绪:
cv2.ocl.setUseOpenCL(False) emotion_dict = {0: "Angry", 1: "Disgusted", 2: "Fearful", 3: "Happy", 4: "Neutral", 5: "Sad", 6: "Surprised"} cap = cv2.VideoCapture(0) while True:ret, frame = cap.read()if not ret:breakbounding_box = cv2.CascadeClassifier('/home/shivam/.local/lib/python3.6/site-packages/cv2/data/haarcascade_frontalface_default.xml')gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)num_faces = bounding_box.detectMultiScale(gray_frame, scaleFactor=1.3, minNeighbors=5)for (x, y, w, h) in num_faces:cv2.rectangle(frame, (x, y-50), (x+w, y+h+10), (255, 0, 0), 2)roi_gray_frame = gray_frame[y:y + h, x:x + w]cropped_img = np.expand_dims(np.expand_dims(cv2.resize(roi_gray_frame, (48, 48)), -1), 0)emotion_prediction = emotion_model.predict(cropped_img)maxindex = int(np.argmax(emotion_prediction))cv2.putText(frame, emotion_dict[maxindex], (x+20, y-60), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)cv2.imshow('Video', cv2.resize(frame, (1200,860), interpolation=cv2.INTER_CUBIC))if cv2.waitKey(1) & 0xFF == ord('q'):break cap.release() cv2.destroyAllWindows()
GUI和表情符号映射的代码
创建一个名为emojis的文件夹,并保存数据集中每种情绪对应的表情符号。
将以下代码粘贴到gui.py中并运行文件。
import tkinter as tk
from tkinter import *
import cv2
from PIL import Image, ImageTk
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D
from keras.optimizers import Adam
from keras.layers import MaxPooling2Demotion_model = Sequential()
emotion_model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(48,48,1)))
emotion_model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
emotion_model.add(MaxPooling2D(pool_size=(2, 2)))
emotion_model.add(Dropout(0.25))
emotion_model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
emotion_model.add(MaxPooling2D(pool_size=(2, 2)))
emotion_model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
emotion_model.add(MaxPooling2D(pool_size=(2, 2)))
emotion_model.add(Dropout(0.25))
emotion_model.add(Flatten())
emotion_model.add(Dense(1024, activation='relu'))
emotion_model.add(Dropout(0.5))
emotion_model.add(Dense(7, activation='softmax'))
emotion_model.load_weights('model.h5')cv2.ocl.setUseOpenCL(False)
emotion_dict = {0: " Angry ", 1: "Disgusted", 2: " Fearful ", 3: " Happy ", 4: " Neutral ", 5: " Sad ", 6: "Surprised"}
emoji_dist={0:"./emojis/angry.png", 1:"./emojis/disgusted.png", 2:"./emojis/fearful.png", 3:"./emojis/happy.png", 4:"./emojis/neutral.png", 5:"./emojis/sad.png", 6:"./emojis/surprised.png"}global last_frame1
last_frame1 = np.zeros((480, 640, 3), dtype=np.uint8)
global cap1
show_text=[0]def show_vid():cap1 = cv2.VideoCapture(0)if not cap1.isOpened():print("cant open the camera1")flag1, frame1 = cap1.read()frame1 = cv2.resize(frame1, (600,500))bounding_box = cv2.CascadeClassifier('/home/shivam/.local/lib/python3.6/site-packages/cv2/data/haarcascade_frontalface_default.xml')gray_frame = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)num_faces = bounding_box.detectMultiScale(gray_frame, scaleFactor=1.3, minNeighbors=5)for (x, y, w, h) in num_faces:cv2.rectangle(frame1, (x, y-50), (x+w, y+h+10), (255, 0, 0), 2)roi_gray_frame = gray_frame[y:y + h, x:x + w]cropped_img = np.expand_dims(np.expand_dims(cv2.resize(roi_gray_frame, (48, 48)), -1), 0)prediction = emotion_model.predict(cropped_img)maxindex = int(np.argmax(prediction))cv2.putText(frame1, emotion_dict[maxindex], (x+20, y-60), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)show_text[0]=maxindexif flag1 is None:print("Major error!")elif flag1:global last_frame1last_frame1 = frame1.copy()pic = cv2.cvtColor(last_frame1, cv2.COLOR_BGR2RGB)img = Image.fromarray(pic)imgtk = ImageTk.PhotoImage(image=img)lmain.imgtk = imgtklmain.configure(image=imgtk)lmain.after(10, show_vid)if cv2.waitKey(1) & 0xFF == ord('q'):exit()def show_vid2():frame2 = cv2.imread(emoji_dist[show_text[0]])pic2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2RGB)img2 = Image.fromarray(pic2)imgtk2 = ImageTk.PhotoImage(image=img2)lmain2.imgtk2 = imgtk2lmain3.configure(text=emotion_dict[show_text[0]], font=('arial',45,'bold'))lmain2.configure(image=imgtk2)lmain2.after(10, show_vid2)if __name__ == '__main__':root = tk.Tk()img = ImageTk.PhotoImage(Image.open("logo.png"))heading = Label(root, image=img, bg='black')heading.pack()heading2 = Label(root, text="Photo to Emoji", pady=20, font=('arial',45,'bold'), bg='black', fg='#CDCDCD')heading2.pack()lmain = tk.Label(master=root, padx=50, bd=10)lmain2 = tk.Label(master=root, bd=10)lmain3 = tk.Label(master=root, bd=10, fg="#CDCDCD", bg='black')lmain.pack(side=LEFT)lmain.place(x=50,y=250)lmain3.pack()lmain3.place(x=960,y=250)lmain2.pack(side=RIGHT)lmain2.place(x=900,y=350)root.title("Photo To Emoji")root.geometry("1400x900+100+10")root['bg']='black'exitbutton = Button(root, text='Quit', fg="red", command=root.destroy, font=('arial',25,'bold')).pack(side = BOTTOM)show_vid()show_vid2()root.mainloop()
总结
在这个面向初学者的深度学习项目中,我们构建了一个卷积神经网络来识别面部情绪。我们在FER2013数据集上训练了我们的模型,然后将这些情绪映射到相应的情绪符号或头像。
使用OpenCV的haar cascade xml,我们获得了网络摄像头中人脸的边界框,然后将这些框输入到训练好的模型中进行分类。
DataFlair致力于为用户提供成为数据科学家所需的所有资源,包括详细的教程、实践、用例以及项目源代码。
参考资料
| 参考资料名称 | 链接 |
|---|---|
| FER2013数据集 | Kaggle FER2013 Dataset |
| Keras官方文档 | Keras Official Documentation |
| OpenCV官方文档 | OpenCV Official Documentation |
| TensorFlow官方文档 | TensorFlow Official Documentation |
| 数据科学教程 | DataFlair Data Science Tutorials |
| 深度学习项目 | DataFlair Deep Learning Projects |
| 图像分类教程 | Image Classification Tutorial |
| CNN架构详解 | CNN Architecture Explained |
| 数据增强技术 | Data Augmentation Techniques |
| GUI编程指南 | GUI Programming Guide |
| 表情符号使用指南 | Emoji Usage Guide |
| 情感分析研究 | Emotion Recognition Research |
| 深度学习框架比较 | Deep Learning Framework Comparison |
| 计算机视觉应用 | Computer Vision Applications |
本项目数据集合介绍:
数据介绍:
FER-2013
从图像中学习面部表情
概述
FER-2013(Facial Expression Recognition 2013)是一个用于面部表情识别的经典数据集,旨在通过图像数据训练模型,使其能够识别人类面部表情所表达的情感。该数据集广泛应用于计算机视觉和情感分析领域,特别是在深度学习模型的训练和评估中。
数据集特点
-
图像格式:
- 图像为48x48像素的灰度图像,每个像素的灰度值范围为0到255。
- 图像已经过预处理,确保面部居中并占据图像的主要部分。
-
情感类别:
- 数据集将面部表情分为七种情感类别:
0 = 愤怒(Angry)
1 = 厌恶(Disgust)
2 = 恐惧(Fear)
3 = 快乐(Happy)
4 = 悲伤(Sad)
5 = 惊讶(Surprise)
6 = 中性(Neutral)

- 数据集将面部表情分为七种情感类别:
-
数据集规模:
- 训练集:28,709张图像

- 测试集:3,589张图像

- 训练集:28,709张图像
任务目标
- 训练一个模型,使其能够根据输入的面部图像,准确分类出对应的情感类别。
- 该任务属于多分类问题,适合使用深度学习模型(如卷积神经网络)来解决。
技术实现
-
数据预处理:
- 将图像像素值归一化到[0, 1]范围,以加速模型训练。
- 可以使用数据增强技术(如旋转、翻转、缩放等)来增加数据多样性,提升模型的泛化能力。
-
模型选择:
- 卷积神经网络(CNN):由于图像数据的特点,CNN是最常用的模型架构。可以设计一个简单的CNN模型,或者使用预训练模型(如VGG、ResNet)进行迁移学习。
- 其他模型:如果计算资源有限,可以尝试使用传统机器学习方法(如SVM、随机森林),但性能可能不如深度学习模型。
-
模型训练:
- 使用训练集(28,709张图像)进行模型训练。
- 通过交叉验证或验证集调整超参数,防止过拟合。
-
模型评估:
- 使用测试集(3,589张图像)评估模型性能。
- 主要评估指标包括准确率、混淆矩阵和F1分数。
- 特别关注模型在少数类别(如“厌恶”)上的表现,避免类别不平衡问题。
-
优化与改进:
- 如果模型表现不佳,可以尝试以下方法:
- 增加数据增强的多样性。
- 调整模型架构(如增加卷积层或全连接层)。
- 使用正则化技术(如Dropout、L2正则化)防止过拟合。
- 对少数类别进行过采样或调整损失函数权重。
- 如果模型表现不佳,可以尝试以下方法:
应用场景
- 情感分析:
- 用于分析用户的情感状态,例如在社交媒体、客户反馈或视频会议中识别用户的情感。
- 人机交互:
- 改进智能助手、机器人等系统的交互体验,使其能够更好地理解用户的情感。
- 心理健康:
- 用于心理健康监测,帮助识别用户的情感波动或潜在的心理问题。
总结
FER-2013数据集为面部表情识别任务提供了一个标准化的基准,适合用于训练和评估深度学习模型。通过合理的数据预处理、模型设计和优化,可以开发出高性能的情感识别系统,广泛应用于情感分析、人机交互和心理健康等领域。
源代码介绍:
使用深度学习创建表情符号——创建您自己的表情符号的项目
学习如何创建一个用于表情符号创建的深度学习模型。我们将实时分析视频流以捕捉面部并识别表情。然后,我们将对表情进行分类并将其映射到相应的头像。
在这个项目中,我们将构建一个卷积神经网络架构,并在FER2013数据集上训练模型,以实现从图像中进行情感识别。
深度学习是人工智能(AI)中机器学习的一个子集,其网络能够从非结构化或未标记的数据中进行无监督学习。您是否想掌握深度学习?快来尝试这些令人惊叹的深度学习项目吧!
类别:深度学习、机器学习、人工智能
编程语言:Python
工具与库:OpenCV haarcascade
IDE:Google Colab
前端:无
后端:Python
先决条件:Python、深度学习、机器学习
目标受众:教育、开发人员、数据科学家、AI专业人士
相关文章:
【机器学习实战入门项目】使用深度学习创建您自己的表情符号
深度学习项目入门——让你更接近数据科学的梦想 表情符号或头像是表示非语言暗示的方式。这些暗示已成为在线聊天、产品评论、品牌情感等的重要组成部分。这也促使数据科学领域越来越多的研究致力于表情驱动的故事讲述。 随着计算机视觉和深度学习的进步,现在可以…...
技术洞察:C++在后端开发中的前沿趋势与社会影响
文章目录 引言C在后端开发中的前沿趋势1. 高性能计算的需求2. 微服务架构的兴起3. 跨平台开发的便利性 跨领域技术融合与创新实践1. C与人工智能的结合2. C与区块链技术的融合 C对社会与人文的影响1. 提升生产力与创新能力2. 促进技术教育与人才培养3. 技术与人文的深度融合 结…...
【人工智能 | 大数据】基于人工智能的大数据分析方法
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…...
数字经济时代下的创新探索与实践:以“开源AI智能名片2+1链动模式S2B2C商城小程序源码”为核心
摘要:在数字经济蓬勃发展的今天,中国作为全球数字经济的领航者,正以前所未有的速度推进“数字中国”建设。本文旨在探讨“开源AI智能名片21链动模式S2B2C商城小程序源码”在数字经济背景下的应用潜力与实践价值,从多个维度分析其对…...
【English-Book】Go in Action目录页翻译中文
第8页 内容 前言 xi 序言 xiii 致谢 xiv 关于本书 xvi 关于封面插图 xix 1 介绍 Go 1 1.1 用 Go 解决现代编程挑战 2 开发速度 3 • 并发 3 • Go 的类型系统 5 内存管理 7 1.2 你好,Go 7 介绍 Go 玩具 8 1.3 总结 8 2 Go 快速入门 9 2.1 程序架构 10 2.2 主包 …...
js: 区分后端返回数字是否为null、‘-’ 或正常number类型数字。
问: 这是我的代码<CountTo v-if!isNaN(Number(item.num))> <span v-else>{{item.num}}</span> 我希望不是null的时候走countTo,是null的时候直接<span>{{item.num}}</span>显示 回答: 最终结果: …...
网络变压器的分类
网络变压器是局域网(LAN)中各级网络设备中必备的元件。它们的主要功能是传输数据,增强信号,并提供电气隔离,以防雷保护和匹配阻抗。网络变压器也被称为数据泵或网络隔离变压器。它们广泛应用于网络交换机、路由器、网卡、集线器等设备中。 网…...
SUCTF-SU_BBRE-好久不见21
哈哈哈哈哈哈,,,,纯汇编有大佬用工具反编译成伪代码吗。。。 题解: 由function2处逻辑,解rc4得到第一段flag We1com3ToReWorld,正常输入下执行完function0,程序结束,cong…...
Python 实现 NLP 的完整流程
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...
穷举vs暴搜vs深搜vs回溯vs剪枝系列一>N 皇后
题目: 解析: 1.决策树: 代码设计: 根据决策树剪枝设计: 代码: class Solution {private List<List<String>> ret;private char[][] path;private boolean[] checkdig1,checkdig2,checkco…...
JEL分类号
JEL分类系统,是美国经济学会“经济文献杂志”(《经济文献杂志》)所创立的对经济学文献的主题分类系统,并被现代西方经济学界广泛采用。 该分类方法主要采用开头的一个英文字母与随后的两位阿拉伯数字一起对经济学各部类进行“辞书式”编码分类。 https:…...
设计和优化用于 AR、HUD 和高级显示系统的表面浮雕光栅
表面浮雕光栅是许多光学系统中的关键组件,在控制增强现实 (AR) 显示器、平视显示器 (HUD) 和其他先进光子器件中的光传播方面发挥着关键作用。作为在这个领域工作的工程师和设计师,您了解针对特定应用优化这…...
【今日分享】人工智能加速发现能源新材料的结构与性能
人工智能与材料国际学术会议(ICAIM)workshop9是由来自宁夏大学材料与新能源学院副院长王海龙教授及马薇副教授、杜鑫老师组成,他们将以“人工智能加速发现新能源新材料的结构与性能”为主题开展研讨工作,欢迎对该主题感兴趣的专家学者携稿加入。 loadin…...
Boost Asio TCP异步服务端和客户端
服务端 消息分两次发送,第一次发送head,第二次发送body。接收也是先接收head,然后通过head结构中的body长度字段再接收body。 TcpServer.h #pragma once #include <atomic> #include <vector> #include <unordered_set> #…...
1.7 ChatGPT:引领AI对话革命的致胜之道
ChatGPT:引领AI对话革命的致胜之道 随着人工智能(AI)技术的迅猛发展,特别是在自然语言处理(NLP)领域,OpenAI 的 ChatGPT 已经成为了举世瞩目的技术突破。从普通的自动化客服到深入的创作与协作,ChatGPT 通过其卓越的语言理解和生成能力,改变了人们与计算机交互的方式…...
WPS数据分析000001
目录 一、表格的新建、保存、协作和分享 新建 保存 协作 二、认识WPS表格界面 三、认识WPS表格选项卡 开始选项卡 插入选项卡 页面布局选项卡 公式选项卡 数据选项卡 审阅选项卡 视图选项卡 会员专享选项卡 一、表格的新建、保存、协作和分享 新建 ctrlN------…...
电脑风扇声音大怎么办? 原因及解决方法
电脑风扇是电脑的重要组件之一,它的作用是为电脑的各个部件提供冷却,防止电脑过热。然而,有时候我们会发现电脑风扇的声音特别大,不仅影响我们的使用体验,也可能是电脑出现了一些问题。那么,电脑风扇声音大…...
高效实现 Markdown 转 PDF 的跨平台指南20250117
高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐,但如何将其转换为易于分享和打印的 PDF 格式,是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法,并探讨…...
Spark Streaming的核心功能及其示例PySpark代码
Spark Streaming是Apache Spark中用于实时流数据处理的模块。以下是一些常见功能的实用PySpark代码示例: 基础流处理:从TCP套接字读取数据并统计单词数量 from pyspark import SparkContext from pyspark.streaming import StreamingContext# 创建Spar…...
自动驾驶占用网格预测
文章目录 需要阅读的文献:github论文仓库论文idea提取BEVFormer 需要阅读的文献: ⭐[ECCV 2024] SparseOcc 纯稀疏3D占用网络和 RayIoU 评估指标 ECCV 2024|OSP:自动驾驶全新建模方法,端到端输出任意位置的占用结果 S…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...
