scratchJR_OCRversion二次开发说明
最后更新时间:
文章总字数:
预计阅读时间:
一次在AI辅助下开展的软件二次开发实践,主要涉及有Electron,SQLite技术栈。
针对特定需求进行scratchJR软件的二次开发说明

开发目的
实体化的积木可以让学生直观地看到代码的结构和逻辑,帮助他们理解编程的基本概念。通过动手操作积木,学生可以更积极地参与学习过程,增强学习的互动性和趣味性。编程对初学者来说可能比较抽象和复杂,实体化的积木可以降低学习难度,让编程变得更加容易接近。通过组合不同的积木块来构建程序,学生可以学习到基本的逻辑和顺序结构,培养逻辑思维能力。
因此为scratchJR教学软件添加拍照识别特定实体代码块,并转换为对应可执行文件的功能。
需求分析
scratchJR二次开发版(以下简称为“sjr”)应在软件原有基础上增加拍照,识别实体代码块,转换为sjr可识别的文件并打开的功能。
sjr应能够在Windows平台(win32_x64),西沃教学白板等平台正常运行。
设计概要
因sjr技术框架为Electron,将拍摄+图像识别,处理+导入图片数据分别设置为两个功能按钮,并辅以图像与标号示意。
功能实现细节见“详细设计”。
拍摄+图像识别
对各类代码块进行编号并标识,使用Python+OpenCV进行摄像头行为控制,将拍下的图片进行OCR文字识别,将识别结果通过ipc通信导入下一步等待用户选择是否导入或重新拍摄。

UMI离线OCR文字识别方案:调用本地文字识别引擎实现无网络情况下sjr能够正常工作,OCR引擎以打包致sjr文件包中并实现点击即用。用户仅需启动OCR服务后即可正常使用sjr识别功能。
开源项目地址:hiroi-sora/Umi-OCR: OCR software, free and offline. 开源、免费的离线OCR软件。内置多国语言库。 (github.com)
处理+导入数据
当用户按下导入数据按钮时,将识别结果导入sjr数据库并自动刷新界面,主界面出现按当前时间命名的新工程,导入成功。
详细设计
参照scratchJR官方二次开发说明进行开发构建。
前端页面设计
在home.html
下添加所需按钮与对应功能:
1 |
|
其中配置按钮的图像与样式的类型如下:其中,点开头的样式用于对按钮位置进行修饰。
1 |
|
其中按钮对应的JavaScript代码将实现拍摄功能对python的调用与前端用户反馈,具体内容如下:
1 |
|
数据处理与导入
以上JavaScript脚本将调用由python编写的图像处理脚本,代码如下:
1 |
|
使用pyinstaller
进行python程序编译,可使其在普通Windows平台正常运行。
另一按钮用于将数据写入jsr,当按钮按下,electron页面将通知渲染进程electronClient.js
,借由渲染进程向主进程发送加载数据的信息:
1 |
|
将数据导入sjr需要调取程序提供的SQLite数据库管理实例,于main.js
中创建一个新方法用于写入数据,通过阅读项目主进程可发现以下数据库管理方法:
1 |
|
透过该方法构建数据库插入语句,并订阅渲染进程传入的导入数据的信息,当接收器收到信号时调用以下方法:
1 |
|
完成数据写入后将自动刷新页面实现新工程的可视化,并通过测试数据完成测试:
1 |
|
程序打包
使用electron提供的打包工具或原sjr提供的指令进行程序编译,详细配置参数如下:
1 |
|
可针对不同的用户平台生成对应的可执行文件。
参考文献
- Umi-OCR GitHub Repository
- 作者:hiroi-sora
- 标题:Umi-OCR: OCR software, free and offline
- URL:https://github.com/hiroi-sora/Umi-OCR
- Umi-OCR Documentation
- 作者:hiroi-sora
- 标题:Umi-OCR Documentation
- URL:https://github.com/hiroi-sora/Umi-OCR/blob/main/docs/http/README.md
- How to Write a Highly Readable Software Engineering Design Document
- 作者:古道轻风
- 标题:如何写一份高可读性的软件工程设计文档
- URL:https://www.cnblogs.com/88223100/p/How-to-write-a-highly-readable-software-engineering-design-document.html
- ScratchJr Desktop README
- 作者:krayon
- 标题:ScratchJr Desktop README
- URL:https://github.com/krayon/scratchjr-desktop/blob/master/README.md
- my-electron-app GitHub Repository
- 作者:sui5yue6
- 标题:my-electron-app Source Code
- URL:https://github.com/sui5yue6/my-electron-app/blob/main/main.js
- Electron Quick Start Guide
- 作者:Electron Team
- 标题:快速入门 | Electron
- URL:https://www.electronjs.org/zh/docs/latest/tutorial/quick-start