【02数据库与小模型篇】0到1打造基于文心大模型和飞桨小模型的智能在线编辑器
创始人
2025-01-16 15:07:57
0

三、数据库

1、简介

数据库简称 DB,是按照数据结构来组织、存储和管理数据的仓库,用户可以对文件的数据进行增加、删除、修改、查找等操作。
区分一下,数据库管理系统简称DBMS,是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库(DB)。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

2、为什么要用数据库

  1. 数据库可以存储大量的数据信息,方便用户进行有效的访问。数据库还可以对数据进行分类保存,并且能够提供快速的查询。
  2. 数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。
  3. 数据库技术能够方便智能化地分析,产生新的有用信息。

3、数据库的分类

①、关系型数据库
采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。下面是常见的一些关系型数据库:
MySQL:
免费的数据库系统。被广泛用于中小型应用系统。体积小、速度快、总体拥有成本低,开放源代码
image.png

SQL Server :
是由微软公司开发的一种关系型数据库管理系统(RDBMS),用于存储和检索数据。它提供了一个可扩展的、安全的和可靠的数据存储和管理解决方案。
image.png
Oracle:
是目前比较成功的关系型数据库管理系统。运行稳定、功能齐全、性能超群、技术领先。主要应用在大型的企业数据库领域。
image.png

4、MySQL基本操作详解

上一篇教程已经安装好了MySQL还有phpMyAdmin,直接在这里进行操作。
image.png
右上角点击数据库工具->打开->选择phpMyAdmin,打开网页,账号和密码都是root,登录进去。
image.png
直接选择SQL,就可以在这里编写SQL语句进行测试了。image.png

4.1、数据库操作

①、查看MySQL服务器下所有数据库

SHOW DATABASES; 

image.png
image.png

information_schema数据库是MySQL服务器的数据字典(保存所有数据表和库的结构信息)
performance_schema数据库是MySQL服务器的性能字典(保存全局变量等的设置)
mysql 主要负责MySQL服务器自己需要使用的控制和管理信息(用户的权限关系等)
sys是系统数据库,包括了存储过程,自定义函数等信息
这4个数据库是MySQL安装时自动创建的,建议不要随意的删除和修改这些数据库,避免造成服务器故障。

②、查看指定数据库的创建信息

SHOW CREATE DATABASE 数据库名称; 

image.png

显示sys数据库的SQL语句,以及数据库的默认字符集

③、选择数据库并查看当前数据库
切记:在输入当前数据库查询的SQL语句前,必须先选择数据库。
先选择editdata数据库,执行如下语句:

USE EditData 

接着查看当前数据库:

SELECT DATABASE(); 

image.png
④、创建数据库

CREATE DATABASE IF NOT EXISTS userinfo; 

image.png
⑤、选择数据库

USE userinfo; 

也可以点击左侧的数据库列表进行数据库的选择。
⑥、删除数据库

DROP DATABASE IF EXISTS userinfo; 
  • 删除数据库,清除数据库中的所有数据,回收为分配的存储空间。
  • 在执行DROP DATABASE 删除数据库时,若待删除的数据库不存在,MySQL服务器会报错。
  • 若想避免上述的情况,在进行删除数据库操作时,使用IF EXISTS来进行规避待删除的数据库不存在报错情况。
4.2、数据表操作

①、创建数据表

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 表名(      字段1 字段1类型 [字段属性] [COMMENT 字段1注释 ],      字段2 字段2类型 [字段属性] [COMMENT 字段2注释 ],      字段3 字段3类型 [字段属性] [COMMENT 字段3注释 ],     ......      字段n 字段n类型 [COMMENT 字段n注释 ]  ) [表属性] [ COMMENT 表注释 ] ; 

例子,创建一个user的表,存储用户的用户名和密码。

CREATE TABLE `userinfo`.`user` (    `id` INT NOT NULL AUTO_INCREMENT ,    `username` VARCHAR(200) NOT NULL ,   `password` VARCHAR(200) NOT NULL ,    PRIMARY KEY (`id`)) ENGINE = MyISAM; 

image.png
image.png
②、查看数据表

SHOW TABLES; 

image.png
③、查看数据表的相关信息

SHOW TABLE STATUS FROM 数据库名; 

image.png
④、查看表结构

{DESCRIBE|DESC} 数据表名; 

image.png
⑤、修改数据表名称

ALTER TABLE 旧表名 RENAME [TO|AS] 新表名; 

例如:

ALTER TABLE user RENAME AS users; 

image.png
⑥、删除数据表

DROP [TEMPORARY] TABLE [IF EXISTS] 数据表1; 

例如:

DROP TABLE IF EXISTS users; 

就成功删除了

4.3、数据操作

①、增加数据
为了方便操作,这里重新加上刚删除的表。

CREATE TABLE `userinfo`.`user` (    `id` INT NOT NULL AUTO_INCREMENT ,    `username` VARCHAR(200) NOT NULL ,   `password` VARCHAR(200) NOT NULL ,    PRIMARY KEY (`id`)) ENGINE = MyISAM; 

可以为部分字段添加数据,模板:

INSERT [INTO] 数据表名(字段名1,字段名2,...,字段名n) {VALUES|VALUE} (值1,值2,...,值n); 

例如:

INSERT INTO user(`username`,`password`) VALUES("123","123"); 

image.png
也可以用下面的方式:

INSERT [INTO] 数据表名 SET 字段名1 = 值1 [,字段名2 = 值2,...,字段名n = 值n] 

例如:

INSERT INTO user SET `username` ="1234" ,`password`="1234"; 

image.png
为所有字段添加数据。

INSERT [INTO] 数据表名 {VALUES|VALUE} (值1,值2,...,值n); 

例如:

INSERT INTO user VALUES ("3","12345","12345"); 

image.png
在为所有字段添加数据时,可以省略字段名称,严格按照数据表结构(字段的位置)插入对应的值。
INTO 为可选择项;VALUE 和VALUES可以任选一种,通常情况下使用VALUES;值列表中值之间用逗号隔开。
在插入数据时,插入的数据顺序必须与创建数据表时对应的字段位置顺序相同,不可搞乱顺序,规避数据顺序错误情况。
②、查询数据
查询全部数据

SELECT * FROM 数据表名; 

例如查询user所有的数据:

SELECT * FROM user; 

可以查询出所有内容。
image.png
查询表子部分字段

SELECT {字段名1,字段名2,字段名3,...,字段名n} FROM 数据表名; 

例如只查询用户名可以这样写:

SELECT username FROM user; 

image.png
简单条件查询数据

SELECT * FROM 数据表名 WHERE 条件表达式; 

例如:

SELECT *  FROM user WHERE `username` = "123"; 

image.png

SELECT *  FROM user WHERE `username` = "123" and `password`="123"; 

image.png
③、更新数据

UPDATE 数据表名 SET 字段名1 = 值1 [,字段名2 = 值2,...] [WHERE 条件表达式]; 

例如:

UPDATE user SET `username` = "666" ,`password` ="666" WHERE `id`="1"; 

image.png
image.png
④、删除数据

DELETE FROM 数据表名 [WHERE 条件表达式]; 

例如:

DELETE FROM user WHERE `username`="1234"; 

image.png

5、pymysql基本操作

5.1、pymysql介绍

PyMySQL是一个Python编写的MySQL驱动程序,让我们可以用Python语言操作MySQL数据库。

5.2、数据操作

首先创建好数据库,userinfo在上面练习过程中创建好了,以这个为例。
接着编写测试函数进行数据操作的增删改查,在之前的后端项目创建一个test.py文件进行测试。
①、增加数据

import pymysql  def adduser():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     username="555"     password="555"     sql = "insert into user (`username`, `password`)values('" + str(username) + "','" + str(password) + "');"     print(sql)      count = cursor.execute(sql)     print(count)     conn.commit()     cursor.close()     conn.close()     return "success"   if __name__ == '__main__':     adduser()  

image.png
image.png
②、查询所有数据

import pymysql  def adduser():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     username="555"     password="555"     sql = "insert into user (`username`, `password`)values('" + str(username) + "','" + str(password) + "');"     print(sql)      count = cursor.execute(sql)     print(count)     conn.commit()     cursor.close()     conn.close()     return "success"  def serchall():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     sql = "select * from user;"     count = cursor.execute(sql)     data = cursor.fetchall()  # cursor.fetchall()     tableData = []     for i in range(count):         datai = data[i]         dataiJson = {"id": datai[0], "username": datai[1], "password": datai[2]}         tableData.append(dataiJson)     conn.commit()     cursor.close()     conn.close()     return tableData   if __name__ == '__main__':     tableData=serchall();     print(tableData) 

image.png
③、删除数据

import pymysql  def adduser():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     username="555"     password="555"     sql = "insert into user (`username`, `password`)values('" + str(username) + "','" + str(password) + "');"     print(sql)      count = cursor.execute(sql)     print(count)     conn.commit()     cursor.close()     conn.close()     return "success"  def serchall():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     sql = "select * from user;"     count = cursor.execute(sql)     data = cursor.fetchall()  # cursor.fetchall()     tableData = []     for i in range(count):         datai = data[i]         dataiJson = {"id": datai[0], "username": datai[1], "password": datai[2]}         tableData.append(dataiJson)     conn.commit()     cursor.close()     conn.close()     return tableData  def deletedata():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     username="555"     sql= "delete from user where username='"+str(username)+"';"     count=cursor.execute(sql)     print(count)     conn.commit()     cursor.close()     conn.close()     return "success"   if __name__ == '__main__':     deletedata() 

image.png
④、修改数据

import pymysql  def adduser():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     username="555"     password="555"     sql = "insert into user (`username`, `password`)values('" + str(username) + "','" + str(password) + "');"     print(sql)      count = cursor.execute(sql)     print(count)     conn.commit()     cursor.close()     conn.close()     return "success"  def serchall():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     sql = "select * from user;"     count = cursor.execute(sql)     data = cursor.fetchall()  # cursor.fetchall()     tableData = []     for i in range(count):         datai = data[i]         dataiJson = {"id": datai[0], "username": datai[1], "password": datai[2]}         tableData.append(dataiJson)     conn.commit()     cursor.close()     conn.close()     return tableData  def deletedata():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     username="555"     sql= "delete from user where username='"+str(username)+"';"     count=cursor.execute(sql)     print(count)     conn.commit()     cursor.close()     conn.close()     return "success" def update():     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use userinfo')     psd="789"     sql= """     update user set `username`='"""+str("789")+"', `password`='"+str(psd)+"' where `username`='"+str("12345")+"';"     count=cursor.execute(sql)     print(count)     conn.commit()     cursor.close()     conn.close()     return "success"  if __name__ == '__main__':     update() 

image.png

四、OCR识别

OCR识别,是一种通过扫描、拍照等光学输入方式将各种票据、报刊、书籍、文稿及其他印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以编辑和检索的文本的技术。OCR识别技术在现代社会中发挥着重要作用,它极大地提高了数据输入的效率和准确性,为文档处理和信息管理提供了高效的解决方案。本章节将详细阐述如何结合PaddlePaddle框架,实现前后端协同工作以完成输入图像中的文字识别任务。

1、图片上传

为了进行OCR操作,首先需要实现让用户在前端上传图片,这里使用Elemet-Plus的Upload组件进行实现。
image.png
先简单调整一下前端样式,打开src/style.css,修改#app样式如下:

#app {   max-width: 1280px;   margin: 0 auto;   padding: 2rem;   text-align: center; } 

在HomePage/index.vue中进行测试,修改代码如下。

      

2、后端接收并保存图片

在后端项目文件夹创建static/images文件夹,用户上传的图片可以存储在此处。
image.png
首先,在终端执行下面安装语句安装opencv-python:

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 

image.png
需要编写后端接口接收uploadimages前端传过来的图像:

from flask import Flask, json, request, jsonify from flask_cors import CORS import pymysql import cv2 import numpy as np import os DEBUG = True app = Flask(__name__) app.config.from_object(__name__) CORS(app, resource={r'/*': {'origins': '*'}})  @app.route('/adduser', methods=['get', 'post']) def adduser():     username = request.form.get("username")     password = request.form.get("password")     print(username)     print(password)     return "已接收用户信息"  @app.route('/uploadimages', methods=['get', 'post']) def uploadimages():     username = request.form.get("username")     img = request.files['file']     picname=img.filename     file = img.read()      file = cv2.imdecode(np.frombuffer(file, np.uint8), cv2.IMREAD_COLOR)  # 解码为ndarray     imgfile1_path = "./static/images/"+username+"/"     if not os.path.exists(imgfile1_path):         os.makedirs(imgfile1_path)     img1_path = os.path.join(imgfile1_path, picname)     cv2.imwrite(filename=img1_path, img=file)     url = "http://127.0.0.1:5000/static/images/"+username+"/" + picname     print(url)      tempmap = {"url": url}     return jsonify(tempmap)      return "已接收用户图片信息"  if __name__ == '__main__':     app.run(host="127.0.0.1", port=5000, debug=True) 

在前端进行上传,发现能够传输到后端并且能进行存储,并返回图片链接。
image.png
image.png
image.png
访问链接可发现能够访问到上传的图像。
image.png

3、数据库存储图片信息

存储图片信息可以为存Base64编码,但是比较吃资源,这里实现存储图片在本地,存储图片路径,用户通过路径访问服务器的图片从而实现存储功能。上一步骤已经生成了图像的链接,接下来把这部分存储到数据库当中。
在之前配置好的Phpstudy的PhpMyAdmin中创建数据库EditData。
image.png
接着创建一个imgpath的数据表,并设计几个字段。
创建包含四个字段的imgpath数据表。
image.png
进行字段的定义,
image.png
image.png
image.png
后端编写存储数据库的代码,完整的main.py代码如下:

from flask import Flask, json, request, jsonify from flask_cors import CORS import pymysql import cv2 import numpy as np import os DEBUG = True app = Flask(__name__) app.config.from_object(__name__) CORS(app, resource={r'/*': {'origins': '*'}})  @app.route('/adduser', methods=['get', 'post']) def adduser():     username = request.form.get("username")     password = request.form.get("password")     print(username)     print(password)     return "已接收用户信息"  @app.route('/uploadimages', methods=['get', 'post']) def uploadimages():     username = request.form.get("username")     img = request.files['file']     picname=img.filename     file = img.read()      file = cv2.imdecode(np.frombuffer(file, np.uint8), cv2.IMREAD_COLOR)  # 解码为ndarray     imgfile1_path = "./static/images/"+username+"/"     if not os.path.exists(imgfile1_path):         os.makedirs(imgfile1_path)     img1_path = os.path.join(imgfile1_path, picname)     cv2.imwrite(filename=img1_path, img=file)     url = "http://127.0.0.1:5000/static/images/"+username+"/" + picname     print(url)     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use editdata')     sql = "INSERT INTO  `imgpath` (`username`,`url`,`picname`) VALUES('" + str(username) + "','" + str(url) + "','" + str(picname) + "');"     ""     print(sql)     count = cursor.execute(sql)     # print(count)     conn.commit()     cursor.close()     conn.close()      tempmap = {"url": url}     return jsonify(tempmap)      return "已接收用户图片信息"  if __name__ == '__main__':     app.run(host="127.0.0.1", port=5000, debug=True)  

前端上传图像,后端接收对应的数据,保存在本地后生成链接,存入地址信息至数据库。测试后发现,可以存储到数据库当中了。
image.png

4、OCR项目在线体验

登录Aistudio平台。
image.png
找到示例项目。
image.png
可以根据项目的说明在线体验一下。
image.png

5、OCR项目本地部署

5.1、PaddleOCR准备

除了之前准备的PaddlePaddle环境,还需要PaddleOCR环境。
PaddleOCR码云地址:https://gitee.com/paddlepaddle/PaddleOCR
模型地址:https://github.com/PaddlePaddle/PaddleOCR/blob/static/doc/doc_ch/algorithm_overview.md
快速开始:https://gitee.com/paddlepaddle/PaddleOCR/blob/main/doc/doc_ch/quickstart.md
先安装PaddleOCR whl包,执行如下指令:

pip install "paddleocr>=2.0.1" -i https://pypi.tuna.tsinghua.edu.cn/simple --user  # 推荐使用2.0.1+版本 

python终端执行:
image.png
安装完成后,上传一张需要识别的测试图片在test.py相同路径下,修改test.py代码进行测试。
image.png

import paddle  print(paddle.__version__) paddle.utils.run_check()  from paddleocr import PaddleOCR, draw_ocr  # Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换 # 例如`ch`, `en`, `fr`, `german`, `korean`, `japan` ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory img_path = './test.png' result = ocr.ocr(img_path, cls=True) for idx in range(len(result)):     res = result[idx]     for line in res:         print(line)  # 显示结果 from PIL import Image result = result[0] image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='./fonts/simfang.ttf') im_show = Image.fromarray(im_show) im_show.save('result.jpg') 

运行后,可以看到出现了result.jpg,同时有运行结果输出。
image.png
result.jpg内容如下。
image.png
至此,本地的环境配置完成,其他一些paddle模型本地运行也可以参考这种方式,安装对应的库,导入训练好的模型(或者自己重新训练也ok),接着进行跑通即可在后续后端进行模型的使用。

5.2、封装为api

加载模型其实比较费时,特别是加载一些比较大的模型时候,推理的时间会较少,因此,可以定义全局的模型,让flask运行时候就先加载好对应的模型,用的时候直接进行推理,能提高响应的速度,修改main.py代码如下。

from flask import Flask, json, request, jsonify from flask_cors import CORS import pymysql import cv2 import numpy as np import os import paddle from paddleocr import PaddleOCR, draw_ocr   DEBUG = True app = Flask(__name__) app.config.from_object(__name__) CORS(app, resource={r'/*': {'origins': '*'}}) ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory  @app.route('/adduser', methods=['get', 'post']) def adduser():     username = request.form.get("username")     password = request.form.get("password")     print(username)     print(password)     return "已接收用户信息"  @app.route('/uploadimages', methods=['get', 'post']) def uploadimages():     username = request.form.get("username")     img = request.files['file']     picname=img.filename     file = img.read()      file = cv2.imdecode(np.frombuffer(file, np.uint8), cv2.IMREAD_COLOR)  # 解码为ndarray     imgfile1_path = "./static/images/"+username+"/"      if not os.path.exists(imgfile1_path):         os.makedirs(imgfile1_path)     img1_path = os.path.join(imgfile1_path, picname)     cv2.imwrite(filename=img1_path, img=file)      img_path=imgfile1_path+picname     result = ocr.ocr(img_path, cls=True)     for idx in range(len(result)):         res = result[idx]         for line in res:             print(line)     url = "http://127.0.0.1:5000/static/images/"+username+"/" + picname     print(url)     conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')     cursor = conn.cursor()     conn.commit()     cursor.execute('use editdata')     sql = "INSERT INTO  `imgpath` (`username`,`url`,`picname`) VALUES('" + str(username) + "','" + str(url) + "','" + str(picname) + "');"     ""     print(sql)     count = cursor.execute(sql)     # print(count)     conn.commit()     cursor.close()     conn.close()      tempmap = {"url": url}     return jsonify(tempmap)      return "已接收用户图片信息"  if __name__ == '__main__':     app.run(host="127.0.0.1", port=5000, debug=True) 

前端上传需要识别的图片,传到后端后进行图像保存并识别文字,识别结果你可以根据自己的任务需求进行存数据库、传回前端等各种操作,至此,本地部署小模型的小模块实现完成了。

6、产线环境配置部署

如果本地资源不足(如无GPU算力,可以使用飞桨的模型产线功能)打开aistudio的模型产线模块。
image.png
创建一个新的产线,选择OCR,设置好产线名称后确认创建:
image.png
可以选择数据集后进行训练后再部署,也可以直接进行部署。
image.png
如果选择直接部署,选择环境之后即可进行,因为需要使用CPU或GPU资源。需要A币进行开启,推荐大家开一个小会员体验一下,送1000个A币+100万Token。
image.png
进行必须项的配置后点击开始部署。
image.png
即可发现部署完成了,给出了使用的示例。
image.png
在本地的test.py中编写代码测试一下,记得替换为自己的token:

import base64 import pathlib import pprint  import requests  API_URL = "https://105b32tccaj145nd.aistudio-hub.baidu.com/ocr" # 请前往 https://aistudio.baidu.com/index/accessToken 查看 访问令牌 并替换 TOKEN = "替换为您的token"  # 设置鉴权信息 headers = {     "Authorization": f"token {TOKEN}",     "Content-Type": "application/json" }  # 对本地图片进行Base64编码 image_path = "./test.png" image_bytes = pathlib.Path(image_path).read_bytes() image_base64 = base64.b64encode(image_bytes).decode('ascii')  # 设置请求体 payload = {     "image": image_base64  # Base64编码的文件内容或者文件链接 }  # 调用 resp = requests.post(url=API_URL, json=payload, headers=headers)  # 处理接口返回数据 assert resp.status_code == 200 result = resp.json()["result"] output_image_path = "output.jpg" with open(output_image_path, "wb") as f:     f.write(base64.b64decode(result["image"])) print(f"OCR结果图保存在 {output_image_path}") print("\n文本信息:") pprint.pp(result["texts"]) 

运行后发现能够使用图像识别的功能,像本地部署一样封装为接口就可以前端调用使用了,可以让用户输入自己的接口,其他部分大家可以自行尝试。
image.png

参考文章

https://blog.csdn.net/m0_73995538/article/details/131216699
https://blog.csdn.net/m0_64338546/article/details/127149168

相关内容

热门资讯

实测交流!微扑克插件使用方法,... 您好,多乐够级记牌工具这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在...
三分钟AI!aapoker到底... 三分钟AI!aapoker到底有挂工具,德扑自定义房间AI(2023已更新)-哔哩哔哩;AI智能教程...
最新技巧!德州游戏辅助器,同城... 最新技巧!德州游戏辅助器,同城游麻将有挂的,有挂教程(2020已更新)(哔哩哔哩)最新技巧!德州游戏...
4个工具!wepoke软件透明... 4个工具!wepoke软件透明挂视频工具,德扑之星数据解析工具(2024已更新)-哔哩哔哩是一款可以...
分享一款!pokermaste... 分享一款!pokermaster外挂,吉祥棋牌黑科技,有挂研究(2021已更新)(哔哩哔哩)分享一款...
实测揭晓!德扑ai助手(透视)... 您好,这款游戏可以开挂的,确实是有挂的,需要了解加微【485275054】很多玩家在这款游戏中打牌都...
七个德州!aapoker有网页... 七个德州!aapoker有网页版软件,wepoke里面有ai德州(2023已更新)-哔哩哔哩是一款可...
安装程序教程!wpk辅助器安装... 安装程序教程!wpk辅助器安装(透视)原来确实是有挂(2021已更新)(哔哩哔哩)是一款可以让一直输...
让我来分享经验!德州之星辅助器... 让我来分享经验!德州之星辅助器,微乐三打一辅助软件,有挂消息(2021已更新)(哔哩哔哩);1、完成...
8分钟透明挂!微扑克辅助安卓版... 亲,微扑克这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是...