From 63fb11cfe0511567a1289e8241bb3e26983e420b Mon Sep 17 00:00:00 2001 From: Guyao146 <61780021+Guyao146@users.noreply.github.com> Date: Fri, 10 May 2024 19:50:02 +0800 Subject: [PATCH 01/16] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fb8630c..3ffa6bd 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +请注意!此仓库为克隆仓库,主仓库为 https://github.com/fslongjin/TextRecogn + # TextRecogn Uncovering AIGC Texts with Machine Learning From 98699b51abe8d3e05fe06defe15039b0b74b4a56 Mon Sep 17 00:00:00 2001 From: Guyao146 <61780021+Guyao146@users.noreply.github.com> Date: Fri, 10 May 2024 21:37:09 +0800 Subject: [PATCH 02/16] Update README.md --- README.md | 41 +++-------------------------------------- 1 file changed, 3 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 3ffa6bd..c4b4738 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -请注意!此仓库为克隆仓库,主仓库为 https://github.com/fslongjin/TextRecogn +# 请注意!此仓库为顾瑶版克隆仓库,主仓库为 https://github.com/fslongjin/TextRecogn # TextRecogn Uncovering AIGC Texts with Machine Learning @@ -11,43 +11,8 @@ Uncovering AIGC Texts with Machine Learning 为保护数据隐私,使用在线版的时候,请务必设置复杂的下载密码! -## How to download all resources? - -1. Install git lfs -2. Clone this repo. - -## How to run? - -### 1. Build docker image - -If you want to build image yourself, following the scripts: - -```shell -docker build -t loooongjin/text_recogn:ernie3-nano . -``` - -Or you can pull the docker image: - -```shell -docker pull loooongjin/text_recogn:ernie3-nano -``` - - -### 2. Run! - - -```shell -docker run --rm -it -p 8000:8000 loooongjin/text_recogn:ernie3-nano -``` - -### 3. Check! - -Put all `docx` files in `./input` , then: - -```shell -python check.py -``` - +## 如何使用 +## 暂未完工,完工后提供下载 ## AD: DragonOS龙操作系统 From 3c4893c0ae55bde15dcca0774b79df7218a1b70f Mon Sep 17 00:00:00 2001 From: Guyao146 <61780021+Guyao146@users.noreply.github.com> Date: Fri, 10 May 2024 21:38:51 +0800 Subject: [PATCH 03/16] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c4b4738..bdc2281 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # 请注意!此仓库为顾瑶版克隆仓库,主仓库为 https://github.com/fslongjin/TextRecogn -# TextRecogn -Uncovering AIGC Texts with Machine Learning +# TextRecogn顾瑶版 +为你检测AI创作的痕迹 ## 在线体验 @@ -12,7 +12,7 @@ Uncovering AIGC Texts with Machine Learning 为保护数据隐私,使用在线版的时候,请务必设置复杂的下载密码! ## 如何使用 -## 暂未完工,完工后提供下载 +暂未完工,完工后提供下载 ## AD: DragonOS龙操作系统 From 264eaaed328e2213b110cc986087d6c11a5fc1d6 Mon Sep 17 00:00:00 2001 From: guyao Date: Fri, 10 May 2024 23:47:12 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E5=A4=A7=E6=94=B9check.py=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E8=BF=99=E7=8E=A9=E6=84=8F=E6=9B=B4=E5=A5=BD=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check.py | 72 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/check.py b/check.py index 18b1d49..818d657 100644 --- a/check.py +++ b/check.py @@ -2,35 +2,59 @@ import requests import base64 import logging +from datetime import datetime +import tkinter as tk +from tkinter import filedialog -# 设置日志级别 -logging.basicConfig(level=logging.INFO) - -URL = "http://localhost:8000/ai_check" input_dir = "./input" output_dir = "./output" +log_dir = "./logs" os.makedirs(input_dir, exist_ok=True) os.makedirs(output_dir, exist_ok=True) +os.makedirs(log_dir, exist_ok=True) -# 使用os模块遍历目录 -for root, dirs, files in os.walk(input_dir): - for file in files: - if file.endswith(".docx"): - # 检查文件是否已经被处理过 - if os.path.exists(os.path.join(output_dir, file)): - logging.info(f"文件 {file} 已处理过,跳过此文件") - continue - - logging.info(f"开始处理文件 {file}") +# 生成带有时间戳的日志文件名 +log_filename = f'./logs/AIGC-{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.log' - input_file = os.path.join(root, file) - with open(input_file, "rb") as f: - response = requests.post(URL, files={"file": ("a.docx", f, "application/octet-stream")}) - - # 将结果保存到 output_dir - output_file = os.path.join(output_dir, file) - with open(output_file, "wb") as f: - f.write(base64.b64decode(response.text)) - - logging.info(f"处理结束,结果已保存到 {output_file}") +# 设置日志级别 +logging.basicConfig( + filename=log_filename, + level=logging.DEBUG, + format='[%(levelname)s] - %(message)s', +) + +print("感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn.") +print("本版本为顾瑶版,贡献者@Guyao146,github地址https://github.com/Guyao146/TextRecognAIGC-COPY") +print("日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用") + +logging.info('感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn') +logging.info('本版本为顾瑶版,贡献者@Guyao146,github地址https://github.com/Guyao146/TextRecognAIGC-COPY') +logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') + +URL = "http://47.113.179.107:8000/ai_check" + +def select_file(): + root = tk.Tk() + root.withdraw() # 隐藏主窗口 + file_path = filedialog.askopenfilename() # 打开文件选择对话框 + return file_path + +file_path = select_file() +print(f"你选择的文件是:{file_path}") + +with open(file_path, "rb") as f: + response = requests.post(URL, files={"file": ("a.docx", f, "application/octet-stream")}) + + # 检查网络请求是否成功 + if response.status_code != 200: + logging.error(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") + print(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") + else: + # 将结果保存到 output_dir + output_file = os.path.join(output_dir, os.path.basename(file_path)) + with open(output_file, "wb") as f: + f.write(base64.b64decode(response.text)) + + logging.info(f"处理结束,结果已保存到 {output_file}") + print(f"处理结束,结果已保存到 {output_file}") From b77b83680f5efecd95018b706ebe41d4d3add17f Mon Sep 17 00:00:00 2001 From: guyao Date: Fri, 10 May 2024 23:58:59 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=96=87=E4=BB=B6=EF=BC=8C=E4=B8=8D=E7=94=A8?= =?UTF-8?q?=E6=94=BE=E8=BF=9B=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 32 +++++++++++++++----------------- check.py | 8 +++++++- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index bdc2281..43bdf90 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,42 @@ -# 请注意!此仓库为顾瑶版克隆仓库,主仓库为 https://github.com/fslongjin/TextRecogn - -# TextRecogn顾瑶版 +# TextRecogn 为你检测AI创作的痕迹 ## 在线体验 - [textrecogn.longjin666.cn](https://textrecogn.longjin666.cn) - 在线版本上传的数据,将在4小时后删除! - 为保护数据隐私,使用在线版的时候,请务必设置复杂的下载密码! ## 如何使用 -暂未完工,完工后提供下载 +如果你想自己构建Docker镜像 +docker build -t loooongjin/text_recogn:ernie3-nano . +如果你想直接拉取已经构建好的 +docker pull loooongjin/text_recogn:ernie3-nano +在服务端运行 +docker run --rm -it -p 8000:8000 loooongjin/text_recogn:ernie3-nano +服务端运行完毕后,在命令行中输入 +python check.py + +## 推荐运行环境 +Python 3.12.2 https://www.python.org/downloads/release/python-3122/ +tk 0.1.0 +requests 2.31.0 ## AD: DragonOS龙操作系统 - DragonOS是使用Rust自研内核的,具有Linux二进制兼容性的服务器操作系统。它由社区驱动开发,完全商业中立,Rust内核操作系统全国排行(按github star排序)稳居前3名! - - 仓库:https://github.com/DragonOS-Community/DragonOS - 官网:https://dragonos.org - ## 本项目贡献者 - - [@fslongjin](https://github.com/fslongjin) - [@zhuweihao12138](https://github.com/zhuweihao12138) - +- [@Guyao146](https://github.com/guyao146) ## 赞赏本项目 - **赞赏资金在扣除TextRecogn的在线服务的服务器成本后,多余款项将全部捐入DragonOS社区公款账户!** - - ## 关于训练数据 - 数据集来自 `HC3 数据集`,本模型(基于ernie3-nano)在其中英文数据上进行了约7个epoch的微调,随机分了3万条数据作为测试集(中英文各50%) - - Ernie3-nano版本:测试集正确率94.1% - Ernie3-base版本:测试集正确率97.41% (稍后开源,这几天有点忙) diff --git a/check.py b/check.py index 818d657..37ea6bb 100644 --- a/check.py +++ b/check.py @@ -24,15 +24,19 @@ format='[%(levelname)s] - %(message)s', ) +print("") print("感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn.") +print("") print("本版本为顾瑶版,贡献者@Guyao146,github地址https://github.com/Guyao146/TextRecognAIGC-COPY") +print("") print("日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用") +print("") logging.info('感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn') logging.info('本版本为顾瑶版,贡献者@Guyao146,github地址https://github.com/Guyao146/TextRecognAIGC-COPY') logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') -URL = "http://47.113.179.107:8000/ai_check" +URL = "http://location:8000/ai_check" def select_file(): root = tk.Tk() @@ -50,6 +54,7 @@ def select_file(): if response.status_code != 200: logging.error(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") print(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") + print("") else: # 将结果保存到 output_dir output_file = os.path.join(output_dir, os.path.basename(file_path)) @@ -58,3 +63,4 @@ def select_file(): logging.info(f"处理结束,结果已保存到 {output_file}") print(f"处理结束,结果已保存到 {output_file}") + print("") From 05c33a6a160181ed41a05722d39e1f64b2f3ee6c Mon Sep 17 00:00:00 2001 From: Guyao146 <61780021+Guyao146@users.noreply.github.com> Date: Mon, 13 May 2024 00:00:41 +0800 Subject: [PATCH 06/16] Update check.py --- check.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/check.py b/check.py index 37ea6bb..7ed4043 100644 --- a/check.py +++ b/check.py @@ -27,13 +27,10 @@ print("") print("感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn.") print("") -print("本版本为顾瑶版,贡献者@Guyao146,github地址https://github.com/Guyao146/TextRecognAIGC-COPY") -print("") print("日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用") print("") logging.info('感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn') -logging.info('本版本为顾瑶版,贡献者@Guyao146,github地址https://github.com/Guyao146/TextRecognAIGC-COPY') logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') URL = "http://location:8000/ai_check" From dcd80f3f4cf1af740b93a414c920b0c122a6758b Mon Sep 17 00:00:00 2001 From: Guyao146 <61780021+Guyao146@users.noreply.github.com> Date: Mon, 13 May 2024 00:05:43 +0800 Subject: [PATCH 07/16] Update README.md --- README.md | 57 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 43bdf90..fb8630c 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,77 @@ # TextRecogn -为你检测AI创作的痕迹 +Uncovering AIGC Texts with Machine Learning ## 在线体验 + [textrecogn.longjin666.cn](https://textrecogn.longjin666.cn) + 在线版本上传的数据,将在4小时后删除! + 为保护数据隐私,使用在线版的时候,请务必设置复杂的下载密码! -## 如何使用 -如果你想自己构建Docker镜像 +## How to download all resources? + +1. Install git lfs +2. Clone this repo. + +## How to run? + +### 1. Build docker image + +If you want to build image yourself, following the scripts: + +```shell docker build -t loooongjin/text_recogn:ernie3-nano . -如果你想直接拉取已经构建好的 +``` + +Or you can pull the docker image: + +```shell docker pull loooongjin/text_recogn:ernie3-nano -在服务端运行 +``` + + +### 2. Run! + + +```shell docker run --rm -it -p 8000:8000 loooongjin/text_recogn:ernie3-nano -服务端运行完毕后,在命令行中输入 +``` + +### 3. Check! + +Put all `docx` files in `./input` , then: + +```shell python check.py +``` -## 推荐运行环境 -Python 3.12.2 https://www.python.org/downloads/release/python-3122/ -tk 0.1.0 -requests 2.31.0 ## AD: DragonOS龙操作系统 + DragonOS是使用Rust自研内核的,具有Linux二进制兼容性的服务器操作系统。它由社区驱动开发,完全商业中立,Rust内核操作系统全国排行(按github star排序)稳居前3名! + - 仓库:https://github.com/DragonOS-Community/DragonOS - 官网:https://dragonos.org + ## 本项目贡献者 + - [@fslongjin](https://github.com/fslongjin) - [@zhuweihao12138](https://github.com/zhuweihao12138) -- [@Guyao146](https://github.com/guyao146) + ## 赞赏本项目 + **赞赏资金在扣除TextRecogn的在线服务的服务器成本后,多余款项将全部捐入DragonOS社区公款账户!** + + ## 关于训练数据 + 数据集来自 `HC3 数据集`,本模型(基于ernie3-nano)在其中英文数据上进行了约7个epoch的微调,随机分了3万条数据作为测试集(中英文各50%) + - Ernie3-nano版本:测试集正确率94.1% - Ernie3-base版本:测试集正确率97.41% (稍后开源,这几天有点忙) From 03e1e378ad62775885c23b0f3c0f7e13a890c1eb Mon Sep 17 00:00:00 2001 From: guyao Date: Fri, 31 May 2024 23:40:59 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E5=8D=95?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=92=8C=E5=A4=9A=E6=96=87=E4=BB=B6=E6=A3=80?= =?UTF-8?q?=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check_all.py | 68 ++++++++++++++++++++++++++++++++++++ check.py => check_onlyone.py | 12 ++++--- 2 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 check_all.py rename check.py => check_onlyone.py (83%) diff --git a/check_all.py b/check_all.py new file mode 100644 index 0000000..8dd1f3d --- /dev/null +++ b/check_all.py @@ -0,0 +1,68 @@ +import os +import requests +import base64 +import logging +from datetime import datetime +import tkinter as tk +from tkinter import filedialog +import ctypes + +# 生成带有时间戳的日志文件名 +log_filename = f'./logs/AIGCall-{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.log' + +# 设置日志级别 +logging.basicConfig( + filename=log_filename, + level=logging.DEBUG, + format='[%(levelname)s] - %(message)s', +) + +Custom_titles = 'TextRecogn-AIGC多文件检测' + +print("") +print("感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn") +print("") +print("日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用") +print("") + +logging.info('感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn') +logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') + +URL = "http://localhost:8000/ai_check" +input_dir = "./input" +output_dir = "./output" + +os.makedirs(input_dir, exist_ok=True) +os.makedirs(output_dir, exist_ok=True) + +# 使用os模块遍历目录 +for root, dirs, files in os.walk(input_dir): + for file in files: + if file.endswith(".docx"): + input_file = os.path.join(root, file) + output_file = os.path.join(output_dir, file) + + # 检查文件是否已经被处理过 + if os.path.exists(output_file): + print(f"文件 {file} 已处理过,跳过此文件") + logging.info(f"文件 {file} 已处理过,跳过此文件") + continue + + logging.info(f"开始处理文件 {file}") + + with open(input_file, "rb") as f: + response = requests.post(URL, files={"file": ("a.docx", f, "application/octet-stream")}) + + # 检查网络请求是否成功 + if response.status_code != 200: + logging.error(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") + print(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") + print("") + else: + # 将结果保存到 output_dir + with open(output_file, "wb") as f: + f.write(base64.b64decode(response.text)) + + logging.info(f"处理结束,结果已保存到 {output_file}") + print(f"处理结束,结果已保存到 {output_file}") + print("") \ No newline at end of file diff --git a/check.py b/check_onlyone.py similarity index 83% rename from check.py rename to check_onlyone.py index 7ed4043..b98db02 100644 --- a/check.py +++ b/check_onlyone.py @@ -5,17 +5,16 @@ from datetime import datetime import tkinter as tk from tkinter import filedialog +import ctypes input_dir = "./input" output_dir = "./output" -log_dir = "./logs" os.makedirs(input_dir, exist_ok=True) os.makedirs(output_dir, exist_ok=True) -os.makedirs(log_dir, exist_ok=True) # 生成带有时间戳的日志文件名 -log_filename = f'./logs/AIGC-{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.log' +log_filename = f'./logs/AIGCone-{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.log' # 设置日志级别 logging.basicConfig( @@ -24,16 +23,21 @@ format='[%(levelname)s] - %(message)s', ) +Custom_titles = 'TextRecogn-AIGC单文件检测' + print("") print("感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn.") +print("感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn") print("") print("日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用") print("") logging.info('感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn') +logging.info('感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn') logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') -URL = "http://location:8000/ai_check" +URL = "http://localhost:8000/ai_check" +output_dir = "./output" def select_file(): root = tk.Tk() From e1e92f8975ba4b08259ff9245ffc37be1880594d Mon Sep 17 00:00:00 2001 From: guyao Date: Fri, 31 May 2024 23:41:52 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E5=85=A8?= =?UTF-8?q?=E9=83=A8=E5=92=8C=E5=8D=95=E4=B8=AA=E6=96=87=E4=BB=B6=E6=A3=80?= =?UTF-8?q?=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check_onlyone.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/check_onlyone.py b/check_onlyone.py index b98db02..dc8c1ba 100644 --- a/check_onlyone.py +++ b/check_onlyone.py @@ -26,13 +26,11 @@ Custom_titles = 'TextRecogn-AIGC单文件检测' print("") -print("感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn.") -print("感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn") +print("感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn.") print("") print("日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用") print("") -logging.info('感谢使用TextRecogn项目,原作者为@fslongjin,贡献者@zhuweihao12138,github地址https://github.com/fslongjin/TextRecogn') logging.info('感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn') logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') From dfc2439d139991d54ec7ea422f78a5f8f0d3efa4 Mon Sep 17 00:00:00 2001 From: guyao Date: Fri, 5 Jul 2024 23:04:44 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BD=91=E5=9D=80?= =?UTF-8?q?=EF=BC=8CBeta=E7=89=88=E5=87=86=E5=A4=87=E4=B8=8A=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check_all.py | 10 ++++++++-- check_onlyone.py | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/check_all.py b/check_all.py index 8dd1f3d..9842542 100644 --- a/check_all.py +++ b/check_all.py @@ -7,6 +7,12 @@ from tkinter import filedialog import ctypes +input_dir = "./input" +output_dir = "./output" + +os.makedirs(input_dir, exist_ok=True) +os.makedirs(output_dir, exist_ok=True) + # 生成带有时间戳的日志文件名 log_filename = f'./logs/AIGCall-{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.log' @@ -28,7 +34,7 @@ logging.info('感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn') logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') -URL = "http://localhost:8000/ai_check" +URL = "http://aigc.mcylyr.cn:20000/ai_check" input_dir = "./input" output_dir = "./output" @@ -65,4 +71,4 @@ logging.info(f"处理结束,结果已保存到 {output_file}") print(f"处理结束,结果已保存到 {output_file}") - print("") \ No newline at end of file + print("") diff --git a/check_onlyone.py b/check_onlyone.py index dc8c1ba..251806a 100644 --- a/check_onlyone.py +++ b/check_onlyone.py @@ -34,7 +34,7 @@ logging.info('感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn') logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') -URL = "http://localhost:8000/ai_check" +URL = "http://aigc.mcylyr.cn:20000/ai_check" output_dir = "./output" def select_file(): From 3d9c541f760999efa487dcdc7408c8ce4542b7fe Mon Sep 17 00:00:00 2001 From: guyao Date: Sat, 6 Jul 2024 18:54:11 +0800 Subject: [PATCH 11/16] =?UTF-8?q?Beta=E7=89=88=201.2=E6=8E=A8=E9=80=81?= =?UTF-8?q?=EF=BC=8C=E6=9C=AC=E6=AC=A1=E6=8E=A8=E9=80=81=E4=BA=86=E5=BE=88?= =?UTF-8?q?=E5=A4=9A=E6=96=B0=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=BB=BA=E8=AE=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aigc_check_fun.py | 10 +---- check.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++ check_all.py | 3 +- check_onlyone.py | 17 ++++++-- logo.ico | Bin 0 -> 29411 bytes 5 files changed, 125 insertions(+), 13 deletions(-) create mode 100644 check.py create mode 100644 logo.ico diff --git a/aigc_check_fun.py b/aigc_check_fun.py index 6a2883c..71cc7bf 100644 --- a/aigc_check_fun.py +++ b/aigc_check_fun.py @@ -389,6 +389,7 @@ async def aigc_check(file: UploadFile,device,model,tokenizer): # 将“AIGC检测结果”插入 doc_output.paragraphs[0].insert_paragraph_before("AIGC检测结果") + doc_output.paragraphs[0].insert_paragraph_before("广告为原生存在,欢迎大家关注DragonOS开源社区,打造属于国人的开源社区") # 设置字体样式为黑体 run = doc_output.paragraphs[0].runs[0] run.font.bold = True @@ -421,15 +422,6 @@ async def aigc_check(file: UploadFile,device,model,tokenizer): # # 设置页眉居中对齐 # header_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER - # 在末尾增加一段 - last_paragraph = doc_output.add_paragraph() - - # 在该段落中插入图片 - run = last_paragraph.add_run() - run.add_picture('static/dragonos.jpg', width=Inches(5.00), height=Inches(2.655)) - - last_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER - doc_output.save(output_file_path) with open(output_file_path, "rb") as f: diff --git a/check.py b/check.py new file mode 100644 index 0000000..6423e32 --- /dev/null +++ b/check.py @@ -0,0 +1,108 @@ +import os +import requests +import base64 +import logging +from datetime import datetime +import tkinter as tk +from tkinter import filedialog +from tkinter import messagebox +import ctypes +import click +import subprocess + +os.system("del /q logs") + +input_dir = "./input" +output_dir = "./output" + +os.makedirs(input_dir, exist_ok=True) +os.makedirs(output_dir, exist_ok=True) + +# 生成带有时间戳的日志文件名 +log_filename = f'./logs/AIGCall-{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.log' + +# 设置日志级别 +logging.basicConfig( + filename=log_filename, + level=logging.DEBUG, + format='[%(levelname)s] - %(message)s', +) + + +class CommandLineApp: + def __init__(self, root): + self.root = root + self.root.title("TextRecogn-AIGC文字检测顾瑶分支") + self.root.iconbitmap('logo.ico') + + # 创建文本框来模拟命令行界面 + self.text = tk.Text(root, wrap=tk.WORD, bg='black', fg='yellow', insertbackground='white', font=("微软雅黑", 20)) + self.text.pack(expand=True, fill=tk.BOTH) + + # 在文本框中插入一些行 + self.text.insert(tk.END, " 欢迎使用TextRecogn-AIGC文字检测顾瑶分支\n") + self.text.insert(tk.END, "\n") + self.text.insert(tk.END, " 请单击您要使用的服务\n") + self.text.insert(tk.END, " 1. 单文件检测\n") + self.text.insert(tk.END, " 2. 多文件检测\n") + self.text.insert(tk.END, " 3. 跳转至原作者项目Github\n") + self.text.insert(tk.END, " 4. 跳转至本项目Github\n") + self.text.insert(tk.END, " 5. 跳转至本项目介绍页\n") + + # 绑定鼠标点击事件 + self.text.bind("", self.on_click) + + def on_click(self, event): + # 获取鼠标点击的行号 + index = self.text.index("@%s,%s" % (event.x, event.y)) + line_number = int(index.split(".")[0]) + + # 根据行号执行相应操作 + if line_number == 4: + self.single_file_selection() + elif line_number == 5: + self.multi_file_selection() + elif line_number == 6: + self.goto_originauth_github() + elif line_number == 7: + self.goto_guyao_github() + elif line_number == 8: + self.goto_guyao_web() + else: + messagebox.showinfo("错误信息", "点击了其他行,请点击想要使用的服务") + + def single_file_selection(self): + # 单文件选择逻辑 + messagebox.showinfo("提示", "你选择了单文件检测,正跳转至单文件检测模块,请在接下来的窗口中选择要检测的文件") + messagebox.showinfo("提示", "检测需要时间,若30s后仍然未自动打开请重新尝试,若多次尝试均未成功,请在上一页面中找到本项目介绍页联系顾瑶") + # 跳转到check_onlyone.py + subprocess.run(["python", "check_onlyone.py"]) + exit() + + def multi_file_selection(self): + # 多文件选择逻辑 + messagebox.showinfo("提示", "你选择了多文件检测,正跳转至多文件检测模块,请在output文件夹中放入要检测的文件") + messagebox.showinfo("提示", "检测需要时间,若30s后仍然未自动打开请重新尝试,若多次尝试均未成功,请在上一页面中找到本项目介绍页联系顾瑶") + # 跳转到check_all.py + subprocess.run(["python", "check_all.py"]) + exit() + + def goto_originauth_github(self): + # 跳转至原作者项目Github + messagebox.showinfo("提示", "正在跳转至原作者项目Github") + os.system("start https://github.com/fslongjin/textrecogn") + + def goto_guyao_github(self): + # 跳转至本项目Github + messagebox.showinfo("提示", "正在跳转至本项目Github") + os.system("start https://github.com/Guyao146/TextRecognAIGC-COPY") + + def goto_guyao_web(self): + # 跳转至本项目网页 + messagebox.showinfo("提示", "正在跳转至本项目介绍页") + os.system("start https://aigc.mcylyr.cn/") + +if __name__ == "__main__": + root = tk.Tk() + app = CommandLineApp(root) + root.mainloop() \ No newline at end of file diff --git a/check_all.py b/check_all.py index 9842542..5a63601 100644 --- a/check_all.py +++ b/check_all.py @@ -53,7 +53,8 @@ print(f"文件 {file} 已处理过,跳过此文件") logging.info(f"文件 {file} 已处理过,跳过此文件") continue - + + messagebox.showinfo("提示", "已检测到文件,开始处理文件,请稍等") logging.info(f"开始处理文件 {file}") with open(input_file, "rb") as f: diff --git a/check_onlyone.py b/check_onlyone.py index 251806a..e07171f 100644 --- a/check_onlyone.py +++ b/check_onlyone.py @@ -5,7 +5,7 @@ from datetime import datetime import tkinter as tk from tkinter import filedialog -import ctypes +import subprocess # 导入 subprocess 模块 input_dir = "./input" output_dir = "./output" @@ -26,7 +26,7 @@ Custom_titles = 'TextRecogn-AIGC单文件检测' print("") -print("感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn.") +print("感谢使用TextRecogn项目,github地址https://github.com/fslongjin/TextRecogn") print("") print("日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用") print("") @@ -44,6 +44,14 @@ def select_file(): return file_path file_path = select_file() + +if not file_path: + print("未选择文件,返回主菜单") + logging.info("未选择文件,返回主菜单") + subprocess.run(["python", "check.py"]) # 运行主菜单脚本 + exit() # 退出当前脚本 + +logging.info(f"选择的文件是:{file_path}") print(f"你选择的文件是:{file_path}") with open(file_path, "rb") as f: @@ -62,4 +70,7 @@ def select_file(): logging.info(f"处理结束,结果已保存到 {output_file}") print(f"处理结束,结果已保存到 {output_file}") - print("") + + if os.path.exists(output_file): + print(f"正在打开文件:{output_file}") + os.startfile(output_file) \ No newline at end of file diff --git a/logo.ico b/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..f4239a68bf4632c1ebc04fb7e2e82809a5efff05 GIT binary patch literal 29411 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 Date: Sat, 6 Jul 2024 18:55:15 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E5=8A=A0=E4=BA=86=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check.py b/check.py index 6423e32..36a09ba 100644 --- a/check.py +++ b/check.py @@ -32,7 +32,7 @@ class CommandLineApp: def __init__(self, root): self.root = root - self.root.title("TextRecogn-AIGC文字检测顾瑶分支") + self.root.title("TextRecogn-AIGC文字检测顾瑶分支 v1.2.b") self.root.iconbitmap('logo.ico') # 创建文本框来模拟命令行界面 From d30562be9f4dc2017d6a87977cbeff021f9dde57 Mon Sep 17 00:00:00 2001 From: guyao Date: Sat, 6 Jul 2024 22:55:08 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E4=BF=AE=E4=BA=86=E4=B8=80=E7=82=B9?= =?UTF-8?q?=E5=B0=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/check.py b/check.py index 36a09ba..fe38b5d 100644 --- a/check.py +++ b/check.py @@ -12,9 +12,21 @@ os.system("del /q logs") +logs_dir = "./logs" input_dir = "./input" output_dir = "./output" +def base_path(path): + if getattr(sys, 'frozen', None): + basedir = sys._MEIPASS + else: + basedir = os.path.dirname(__file__) + return os.path.join(basedir, path) + +tmd = base_path('') +os.chdir(tmd) + +os.makedirs(logs_dir, exist_ok=True) os.makedirs(input_dir, exist_ok=True) os.makedirs(output_dir, exist_ok=True) @@ -32,8 +44,7 @@ class CommandLineApp: def __init__(self, root): self.root = root - self.root.title("TextRecogn-AIGC文字检测顾瑶分支 v1.2.b") - self.root.iconbitmap('logo.ico') + self.root.title("TextRecogn-AIGC文字检测顾瑶分支 v1.5.b") # 创建文本框来模拟命令行界面 self.text = tk.Text(root, wrap=tk.WORD, bg='black', fg='yellow', insertbackground='white', font=("微软雅黑", 20)) @@ -41,6 +52,7 @@ def __init__(self, root): # 在文本框中插入一些行 self.text.insert(tk.END, " 欢迎使用TextRecogn-AIGC文字检测顾瑶分支\n") + os.system("cd") self.text.insert(tk.END, "\n") self.text.insert(tk.END, " 请单击您要使用的服务\n") self.text.insert(tk.END, " 1. 单文件检测\n") @@ -76,16 +88,16 @@ def single_file_selection(self): messagebox.showinfo("提示", "你选择了单文件检测,正跳转至单文件检测模块,请在接下来的窗口中选择要检测的文件") messagebox.showinfo("提示", "检测需要时间,若30s后仍然未自动打开请重新尝试,若多次尝试均未成功,请在上一页面中找到本项目介绍页联系顾瑶") # 跳转到check_onlyone.py - subprocess.run(["python", "check_onlyone.py"]) - exit() + subprocess.run(["python", "./check_onlyone.py"]) + sys.exit() def multi_file_selection(self): # 多文件选择逻辑 messagebox.showinfo("提示", "你选择了多文件检测,正跳转至多文件检测模块,请在output文件夹中放入要检测的文件") messagebox.showinfo("提示", "检测需要时间,若30s后仍然未自动打开请重新尝试,若多次尝试均未成功,请在上一页面中找到本项目介绍页联系顾瑶") # 跳转到check_all.py - subprocess.run(["python", "check_all.py"]) - exit() + subprocess.run(["python", "./check_all.py"]) + sysexit() def goto_originauth_github(self): # 跳转至原作者项目Github From dffef707db3a9714e434fda7d54622589beafd30 Mon Sep 17 00:00:00 2001 From: guyao Date: Sat, 6 Jul 2024 23:37:38 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E6=94=B9=E4=BA=86=E7=82=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check.py | 2 +- check_all.py | 31 +++++++++++++++++++++---------- check_onlyone.py | 26 +++++++++++++++++++++----- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/check.py b/check.py index fe38b5d..22e0cde 100644 --- a/check.py +++ b/check.py @@ -97,7 +97,7 @@ def multi_file_selection(self): messagebox.showinfo("提示", "检测需要时间,若30s后仍然未自动打开请重新尝试,若多次尝试均未成功,请在上一页面中找到本项目介绍页联系顾瑶") # 跳转到check_all.py subprocess.run(["python", "./check_all.py"]) - sysexit() + sys.exit() def goto_originauth_github(self): # 跳转至原作者项目Github diff --git a/check_all.py b/check_all.py index 5a63601..0eb2563 100644 --- a/check_all.py +++ b/check_all.py @@ -5,7 +5,8 @@ from datetime import datetime import tkinter as tk from tkinter import filedialog -import ctypes +import time # 导入 time 模块 +import shutil input_dir = "./input" output_dir = "./output" @@ -16,6 +17,9 @@ # 生成带有时间戳的日志文件名 log_filename = f'./logs/AIGCall-{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.log' +# 获取用户桌面路径 +desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop') + # 设置日志级别 logging.basicConfig( filename=log_filename, @@ -35,11 +39,6 @@ logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') URL = "http://aigc.mcylyr.cn:20000/ai_check" -input_dir = "./input" -output_dir = "./output" - -os.makedirs(input_dir, exist_ok=True) -os.makedirs(output_dir, exist_ok=True) # 使用os模块遍历目录 for root, dirs, files in os.walk(input_dir): @@ -53,9 +52,9 @@ print(f"文件 {file} 已处理过,跳过此文件") logging.info(f"文件 {file} 已处理过,跳过此文件") continue - - messagebox.showinfo("提示", "已检测到文件,开始处理文件,请稍等") + logging.info(f"开始处理文件 {file}") + print(f"开始处理文件 {file}") with open(input_file, "rb") as f: response = requests.post(URL, files={"file": ("a.docx", f, "application/octet-stream")}) @@ -64,7 +63,6 @@ if response.status_code != 200: logging.error(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") print(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") - print("") else: # 将结果保存到 output_dir with open(output_file, "wb") as f: @@ -72,4 +70,17 @@ logging.info(f"处理结束,结果已保存到 {output_file}") print(f"处理结束,结果已保存到 {output_file}") - print("") + +# 将 output 文件夹的内容复制到桌面上 +for item in os.listdir(output_dir): + s = os.path.join(output_dir, item) + d = os.path.join(desktop, item) + if os.path.isdir(s): + shutil.copytree(s, d) + else: + shutil.copy2(s, d) + +# 增加延时,确保文件操作完成 +time.sleep(1) + +print("所有文件已复制到桌面") diff --git a/check_onlyone.py b/check_onlyone.py index e07171f..a8ff038 100644 --- a/check_onlyone.py +++ b/check_onlyone.py @@ -6,6 +6,8 @@ import tkinter as tk from tkinter import filedialog import subprocess # 导入 subprocess 模块 +import shutil +import time # 导入 time 模块 input_dir = "./input" output_dir = "./output" @@ -16,6 +18,9 @@ # 生成带有时间戳的日志文件名 log_filename = f'./logs/AIGCone-{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.log' +# 获取用户桌面路径 +desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop') + # 设置日志级别 logging.basicConfig( filename=log_filename, @@ -35,7 +40,6 @@ logging.info('本日志仅保存在本地用于诊断脚本问题,不上传至服务器,请放心使用') URL = "http://aigc.mcylyr.cn:20000/ai_check" -output_dir = "./output" def select_file(): root = tk.Tk() @@ -61,7 +65,6 @@ def select_file(): if response.status_code != 200: logging.error(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") print(f"网络请求失败,状态码{response.status_code} 返回信息{response.text}") - print("") else: # 将结果保存到 output_dir output_file = os.path.join(output_dir, os.path.basename(file_path)) @@ -71,6 +74,19 @@ def select_file(): logging.info(f"处理结束,结果已保存到 {output_file}") print(f"处理结束,结果已保存到 {output_file}") - if os.path.exists(output_file): - print(f"正在打开文件:{output_file}") - os.startfile(output_file) \ No newline at end of file + # 将output文件夹的内容复制到桌面上 + for item in os.listdir(output_dir): + s = os.path.join(output_dir, item) + d = os.path.join(desktop, item) + if os.path.isdir(s): + shutil.copytree(s, d) + else: + shutil.copy2(s, d) + + destination_file_path = os.path.join(desktop, os.path.basename(output_file)) + if os.path.exists(destination_file_path): + print(f"正在打开文件:{destination_file_path}") + os.startfile(destination_file_path) + else: + print(f"文件 {destination_file_path} 不存在") + time.sleep(3) From 2eef4e9ad76231733ce400ceb164674814ea412a Mon Sep 17 00:00:00 2001 From: guyao Date: Mon, 3 Mar 2025 22:22:23 +0800 Subject: [PATCH 15/16] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E6=A8=A1=E5=9D=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check.py | 1 + check_all.py | 1 + 2 files changed, 2 insertions(+) diff --git a/check.py b/check.py index 22e0cde..c3c3583 100644 --- a/check.py +++ b/check.py @@ -2,6 +2,7 @@ import requests import base64 import logging +import sys from datetime import datetime import tkinter as tk from tkinter import filedialog diff --git a/check_all.py b/check_all.py index 0eb2563..680071a 100644 --- a/check_all.py +++ b/check_all.py @@ -7,6 +7,7 @@ from tkinter import filedialog import time # 导入 time 模块 import shutil +from datetime import datetime input_dir = "./input" output_dir = "./output" From d6a0d2f2be3444c60b9ad26c09d841f925ce6b4f Mon Sep 17 00:00:00 2001 From: Guyao146 <61780021+Guyao146@users.noreply.github.com> Date: Mon, 3 Mar 2025 22:27:37 +0800 Subject: [PATCH 16/16] Delete .gitattributes --- .gitattributes | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index df87960..0000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -model/* filter=lfs diff=lfs merge=lfs -text