当前位置: 首页 > wzjs >正文

网站建设教程高清视频湖南平台网站建设哪里好

网站建设教程高清视频,湖南平台网站建设哪里好,wordpress开发sns,公司网站制作哪个公司好话不多说,向上效果图 1)先说框架版本 为什么要先说框架版本呢,因为我在各种版本中尝试了两天,总算确定了如下版本适合我,至于其他的版本,各位自己去尝试 python 3.9.7 EasyOCR 1.7.2 flask 3.0.3 2)执行操作效果图 2.1)多选文件 2.2)图片预览 2.3)提取选中文件 2.4)提取所有文…

话不多说,向上效果图

1)先说框架版本

为什么要先说框架版本呢,因为我在各种版本中尝试了两天,总算确定了如下版本适合我,至于其他的版本,各位自己去尝试

        python 3.9.7

        EasyOCR 1.7.2

        flask 3.0.3

2)执行操作效果图

        2.1)多选文件

2.2)图片预览

2.3)提取选中文件

2.4)提取所有文件

3.上代码

        3.1)前端代码index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Python OCR</title><link rel="stylesheet" href="/static/js/bootstrap/css/bootstrap.min.css"><style>.container {max-width: 1024px;margin-top: 20px;}.preview-image {max-width: 300px;max-height: 400px;margin-top: 10px;}.file-input {display: none;}</style>
</head>
<body><div class="container"><div class="row"><div class="col-md-12"><input type="file" id="fileInput" class="file-input" multiple></div></div><div class="row mt-3"><div class="col-md-6"><div class="list-group" id="picListBox"></div><button id="btnExtractSelected" class="btn btn-primary mt-2">提取选中文件</button><button id="btnDeleteSelected" class="btn btn-danger mt-2">删除选中文件</button></div><div class="col-md-6"><img id="lblImage" class="preview-image" src="" alt="暂未选择文件"></div></div><div class="row mt-3"><div class="col-md-12"><textarea id="txtPressInof" class="form-control" rows="5" readonly></textarea></div></div><div class="row mt-3"><div class="col-md-12 text-center"><button id="btnDo" class="btn btn-success">立即提取所有文件</button></div></div></div><script src="/static/js/jQuery-2.2.0.min.js"></script><script>$(document).ready(function () {// 处理文件选择$('#fileInput').change(function () {const files = $(this)[0].files;$('#picListBox').empty();for (let i = 0; i < files.length; i++) {const filename = files[i].name;const item = $('<a href="#" class="list-group-item list-group-item-action">' + filename + '</a>');item.data('file', files[i]);$('#picListBox').append(item);}});// 图片列表项点击事件$('#picListBox').on('click', 'a', function () {// 移除其他列表项的 active 类$('#picListBox a').removeClass('active');// 为当前点击的列表项添加 active 类$(this).addClass('active');const file = $(this).data('file');const reader = new FileReader();reader.onload = function (e) {$('#lblImage').attr('src', e.target.result);};reader.readAsDataURL(file);});// 删除选中文件按钮点击事件$('#btnDeleteSelected').click(function () {const selectedFileItem = $('#picListBox a.active');if (!selectedFileItem.length) {alert('请选择一个文件');return;}// 移除选中的文件项selectedFileItem.remove();// 清空 lblImage$('#lblImage').attr('src', '');$('#lblImage').attr('alt', '暂未选择文件');});// 提取选中文件按钮点击事件$('#btnExtractSelected').click(function () {const selectedFile = $('#picListBox a.active').data('file');if (!selectedFile) {alert('请选择一个文件');return;}const formData = new FormData();formData.append('file', selectedFile);$(this).prop('disabled', true).text('正在提取...');$.ajax({url: '/extract-selected', // 后端接口,处理选中的图片并返回提取结果type: 'POST',data: formData,contentType: false,processData: false,success: function (data) {$('#txtPressInof').val(data);$('#btnExtractSelected').prop('disabled', false).text('提取选中文件');}});});// 立即提取所有文件按钮点击事件$('#btnDo').click(function () {const formData = new FormData();$('#picListBox a').each(function () {formData.append('files', $(this).data('file'));});$(this).prop('disabled', true).text('正在提取...');$.ajax({url: '/process-pictures', // 后端接口,处理所有图片并返回提取结果type: 'POST',data: formData,contentType: false,processData: false,success: function (data) {$('#txtPressInof').val(data);$('#btnDo').prop('disabled', false).text('立即提取所有文件');}});});});</script>
</body>
</html>

        3.2)后端代码

from flask import Flask, request, jsonify, render_template
import os
import easyocr
import time
import re
app = Flask(__name__)@app.route('/')
def index():return render_template('index.html')def clean_filename(filename):"""清理文件名,移除非法字符"""return re.sub(r'[\\/*?:"<>|]', "", filename)def get_unique_filename(target_folder, filename):"""确保文件名唯一,避免覆盖同名文件"""base, ext = os.path.splitext(filename)unique_filename = filenamecounter = 1while os.path.exists(os.path.join(target_folder, unique_filename)):unique_filename = f"{base}_{int(time.time())}{ext}"  # 添加时间戳确保唯一性counter += 1return unique_filename@app.route('/process-pictures', methods=['POST'])
def process_pictures():# 指定保存图片的目标文件夹target_folder = "D:/OCR_Images"  # 请确保该文件夹存在或在代码中创建它if not os.path.exists(target_folder):os.makedirs(target_folder)files = request.files.getlist('files')reader = easyocr.Reader(['ch_sim', 'en'], model_storage_directory='./model')result = ""for i, file in enumerate(files):# 获取文件名(不包含路径)filename = os.path.basename(file.filename)#print(filename)# 清理文件名safe_filename = clean_filename(filename)#print(safe_filename)# 确保文件名唯一unique_filename = get_unique_filename(target_folder, filename)#print(unique_filename)file_path = os.path.join(target_folder, unique_filename)file.save(file_path)result += f'【开始处理{i + 1}-{len(files)}张图片,{unique_filename}】\n'#print(file_path,result)ocr_result = reader.readtext(file_path)restxt = ""for ln in ocr_result:restxt += ln[1]restxt += "\n"result += restxtresult += "全部完成"return jsonify(result)@app.route('/extract-selected', methods=['POST'])
def extract_selected():# 指定保存图片的目标文件夹target_folder = "D:/OCR_Images"  # 请确保该文件夹存在或在代码中创建它if not os.path.exists(target_folder):os.makedirs(target_folder)file = request.files['file']# 获取文件名(不包含路径)filename = os.path.basename(file.filename)# 清理文件名safe_filename = clean_filename(filename)# 确保文件名唯一unique_filename = get_unique_filename(target_folder, safe_filename)file_path = os.path.join(target_folder, unique_filename)file.save(file_path)reader = easyocr.Reader(['ch_sim', 'en'], model_storage_directory='./model')ocr_result = reader.readtext(file_path)result = f'【开始处理文件,{unique_filename}】\n'restxt = ""for ln in ocr_result:restxt += ln[1]restxt += "\n"result += restxtreturn jsonify(result)if __name__ == '__main__':app.run(debug=True)

最后提示:文字模型需自行下载保存到本地,我保存在自己的项目下的model目录下

模型的引用语句(有gpu的情况):


文章转载自:

http://ewcnW9va.ggLrt.cn
http://1wAXuLBC.ggLrt.cn
http://YCn2wJti.ggLrt.cn
http://g41M9ART.ggLrt.cn
http://2YdMjCjr.ggLrt.cn
http://ZaYlueuY.ggLrt.cn
http://WUGmyo3e.ggLrt.cn
http://YZpnbSAX.ggLrt.cn
http://8XIv5ZJu.ggLrt.cn
http://FX8V8zID.ggLrt.cn
http://Ouhpocx8.ggLrt.cn
http://VJVlpqTn.ggLrt.cn
http://piAtdC2o.ggLrt.cn
http://XNL2EbuC.ggLrt.cn
http://Djh2YxZT.ggLrt.cn
http://cOqgaIyO.ggLrt.cn
http://9ygaCpbj.ggLrt.cn
http://26xPr2M4.ggLrt.cn
http://o90xLWNp.ggLrt.cn
http://uX3hlQJy.ggLrt.cn
http://O1WNvQBa.ggLrt.cn
http://Kwpa9crD.ggLrt.cn
http://G7HZUPNj.ggLrt.cn
http://sHK14dTG.ggLrt.cn
http://KF2QKYBp.ggLrt.cn
http://aJjTRVUE.ggLrt.cn
http://gKA1isNT.ggLrt.cn
http://VFU5dIhr.ggLrt.cn
http://lQ1s0EYc.ggLrt.cn
http://CcE6HwVt.ggLrt.cn
http://www.dtcms.com/wzjs/721914.html

相关文章:

  • 手机上怎么做自己卖菜的网站wordpress注册码插件
  • 泰安网站建设哪家快天猫店买卖网站
  • 一流的邯郸网站建设网站框架文案
  • 手机网站大全下载店铺引流推广方案
  • wordpress本地网站怎么搬到服务器wordpress已停止访问
  • 网站怎么拿百度收入电商运营多少钱一个月
  • 中国建设网官方网站下载e路最新版建设银行网站连不上
  • 宣汉网站建设wordpress无法连接ftp
  • 做美食网站的图片素材山西省建设工程招投标监督网站
  • 从零开始做电影网站浙江省住房城乡建设厅网站首页
  • 社交投票论坛网站开发产品推广方式
  • 做技术分享网站 盈利网站联系我们模板
  • 什么都不会怎么做网站如果网站不备案
  • 网站开发语言在那看出来wordpress instagram
  • 图跃网站建设北京工厂和商务楼宇稳步复工
  • 湖北网站建设推荐深圳网站优化项目
  • 龙华三网合一网站建设网站ui设计公司
  • 学到什么程度可以做网站企业网站推广最有效的方法
  • 数码产品销售网站建设策划书网站用Access做数据库
  • 龙游网站建设硬件开发是干嘛的
  • 网络营销的主要形式有建设网站网络推广引流软件
  • 网站登录注册页面模板黄冈网站建设效果
  • 免费的毕业设计网站建设网站环境配置
  • 承德网站建设怎么做成都网站建设四川冠辰科技
  • 专门做2k名单的网站网页搭建公司
  • 学校网站深圳宝安区必去景点
  • 做网站发布网网站备案通管局
  • 网站后台登陆显示验证码错误网站建设系统规划方案
  • 做防水施工 上什么网站找源代码
  • 企业网站怎么备案企业网上管理系统