Skip to content

moneypiaorui/AntiquitiesDatabase

Repository files navigation

软开项目:文物数据库

TimeLine

  • 10.11
    • 爬虫大体完成
    • 页面设计大体完成
    • 二维码识别完成
  • 10.12
    • 接收图片,获取条形码,爬取官网图片的代码实现
    • uniapp能够拍照,向nodejs发送图片并拿到响应
  • 10.13
    • 写了新的nodejs构建sqlite数据库,6级结构存储文物信息
    • 后端nodejs基本逻辑实现
    • 前端使用v0+cursor快速构建nextjs项目,实现数据检索+拍照+用户功能+浏览历史+收藏夹功能
    • 48h大体完工
  • 10.15
    • 云端部署完成,绑定域名并启用https,前端http请求使用后端proxy路由代理避免混合内容异常
    • 拍照识别的upload路由实现返回SSE流,实现识别进度条功能
  • 10.16
    • 优化图片使用cloudinary存储和加速,不同组件使用不同大小的图片(cloudinary提供),优化用户访问速度
  • 10.17
    • 优化页面栈跳转逻辑,优化浏览器history和返回功能
  • 10.18
    • 尝试apk打包,成功

食用

  • crawler为爬虫,获取数据存在crawler/database中。使用见 crawlerReadme.md
  • 框架设计预览
  • 二维码识别:cv2和pyzbar
  • 前端Nextjs,打包后out/内文件放到server/public/下

环境配置

python

  • 安装conda并且配置环境变量
  • 打开终端,输入conda create -n Antidb一路yes创建环境
  • 输入conda activate Antidb切换环境(注意终端开头左侧要有(base)字样)
  • 输入pip install opencv-python numpy pyzbar安装依赖

nodejs

  1. 安装nodejs,配置环境变量
  2. 在项目根目录下打开终端/命令行/cmd,运行npm install安装依赖
  3. 输入node ./crawler/getDataAll.jsornode ./crawler/getData3year.js启动爬虫脚本
  4. 若要启动app.js,先切换conda环境conda activate Antidb再输入node ./server/app.js启动后端服务,端口4000

nextjs

  • cd到Nextjs下,npm run dev启动开发环境,端口3000
  • 在配置文件next.config.mjs中添加output: 'export',方便后续打包成静态资源
  • npm run build进行打包,如果报很多错可以把eslinetrc.json删了
  • 打包完成后既可以npm run start通过node启动,也可以把out/下的资源放到web服务器上
  • 开发环境通过代理将相对路径的请求转发到localhost上,具体见next.config.js文件配置
  • 配置环境变量,开发时候请求host为localhost:5000,生产环境为云服务器域名(暂时antidb.chainpray.com)

代码结构

crawler

  • getDataAll.js通过id检索所有的拍品,单独提取jizhiyinbi类;id范围测试得约为0~1296000,部分id不存在
  • getData3year.js通过搜索页面检索近三年的机制银币(三年是非会员限制),通过设置第一个get请求的per_page字段来改变获取量,比如1000就是获取最近1000个藏品。注意机制银币拍品数量大约是100*585个
  • buildDatabase.js 构建server所需要的item.db 和 传给前端做fliter的classification.json,树形结构存储分类信息(注:爬取的图片上传到cloudinary加速,数据库存储cloudinary图片信息)
  • classification.json 文物树形关系
  • item.db 文物信息数据库(爬虫爬的)

scanner

  • scanner.py通过标准输入读取buffer,先转为npArray,再用opencv读取,回传JSON字符串,结构{'message':'succeed','codeType':1/0,'code':...}
  • cameraScanner.py从摄像头扫描二维码/条形码并实时读取

server

  • app.js实现基本后端功能,并在/upload路由中调用getAccess(Buffer)来进行评级比对的相关逻辑
  • getAccess.js 导出一个getAccess模块,传入图片的buffer,拉起python并将buffer传递给scanner.py,获取条形码/二维码code,再去首席收藏家爬取评级信息,返回Promise对象,没有抛出异常的话resolve(itemInfo)返回物品信息
  • components/ 组件库 主要是db的初始化和导入,以及解析token的中间件
  • router/ 路由文件
    • artifacts.js 文物相关api
    • userActions.js 主要是历史信息和收藏的api
    • users 登录注册和token验证的路由
    • proxy 代理http请求(主站是https访问,如果资源访问是http请求存在混合内容异常,需要代理访问)
  • uploads/ 暂存用户上传的图片
  • compare/ 存放比较的图片方便python程序获取和比较
  • cahce/ http代理的缓存
  • public/ 网页静态文件

Nextjs

  • components/app.tsx 是核心文件,因为是v0生成没有做模块分离

uniapp

  • pages
    • index
      • index.vue // 文物数据库页面
    • profile
      • profile.vue // 我的页面
    • identify
      • identify.vue // 识别页面
  • components
    • Header.vue // 公共头部
    • Navigation.vue // 导航
    • FilterPopover.vue // 筛选弹出层
    • ArtifactCard.vue // 文物卡片
    • BottomNav.vue // 底部导航

待办

爬虫

  • 有些页面有两张图,暂时只能获取一张
  • 一个item可以存储多张照片
  • 详细信息获取和存储

算法

  • 实现上传图片和爬取的官网比对,获取匹配率
  • 二维码识别会因为图片模糊而无法处理,应当增加图像增强and滤波算法
  • getAccess.js返回比对信息
  • 知识图谱构建
  • 无信息银币识别和估值

前端

  • 页面构建有点问题,递归栈cursor写的不好
  • 用户管理系统还没加
  • 历史记录不能删除检索,且没加离散化功能
  • Next使用app路由覆写页面栈的逻辑

后端

  • 暂时nodejs轻量化实现,后续java覆写

About

文物检索与鉴别

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published