同步操作将从 WangRuiHuan/hockshop 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
部署存证应用的区块链网络,存证应用可以通过大数据、深度学习、图像识别等方式对数字资产进行识别并提取其中关键信息,将数字资产中关键信息及数字资产的md5值保存到区块链,同时将数字资产保存到存储服务器。
本系统依赖如下环境,我们建议按照顺序进行部署.
区块链
Hyperledger fabric 部署
在此项目中,我们使用 Hyperledger fabric 运行区块链网络,关于 Hyperledger fabric 环境的搭建请参阅Hyperledger fabric 部署.
Zookeeper 部署
在2.0版本中,为便于系统扩展及负载均衡,我们将dfs,blockchain,marmot三个项目作为独立服务分离出来,服务发现及注册中心采用zookeeper,同时zookeeper被hadoop高可用服务中journalnode所依赖,关于zookeeper部署参阅/script/zookeeper/README.md.
Hadoop HDFS 部署
本系统的文件存储采用hadoop的分布式文件系统HDFS,关于这部分的部署参阅这里.
在2.0版本中,我们改进了之前版本中hadoop dhfs中namenode存在的单节点故障问题,采用主备配置,关于高可用部署请参阅hadoop hdfs高可用部署.
监控服务
机器性能及状态监控服务的部署参阅monitor部署.
py-face 部署
java各项服务部署
2.0版本中,我们将dfs,marmot,blockchain这三个项目作为RPC独立服务分离出来,关于这RPC服务的部署请参阅/java/application/README.md.
restful API 部署
在上述服务全部启用之后,部署API项目,API项目部署参阅这里.
web 项目部署
前端web项目部署请参阅 这里.
应用操作手册请参阅hockshop-web/README.md.
本项目中采用非对称加密的RSA公私钥进行用户认证,认证流程如下所示:
在实际开发过程中,我们遇到了诸如java依赖冲突,单项服务异常引起服务不稳定等问题,所以将与区块网络交互的部分作开发了一个服务中间件,以网络交互的方式替换本地JAVA调用,现在用户请求资产存证流程如下所示:
由于本系统较为复杂,单独的服务包括 mysql,redis,apache,hadoop,fabric,tomcat,flask,这还未包括应用的构建及运行,这使得运维的工作较为繁琐,所以除部分应用采用传统的物理主机部署之外,我们采用docker技术将包括fabric,hadoop及py-face应用的部署进行了容器化处理,关于docker使用及部署,请详细参阅script目录下的内容.
由于本应用几乎所有关于用户数据的操作均通过进行,而网络IO又是极为消耗时间的操作,所以缓存在本项目中具有极为重要的地位.
文件最终一致缓存
由于文件的存储在本应用中是以哈希值进行区分,所以文件操作之间相互没有对时间的依赖性,我们选择对系统资源要求更低的最终一致性缓存策略.即文件保存至缓存中但未保存至HDFS中时也认为保存成功。 针对由网络或者HDFS服务瘫痪造成的上传失败,失败任务将会在重传队列中按照策略(包括:定时重传,随机轮询,增量重试等)进行重传. 流程如下图所示:
区块信息的强一致缓存
区块信息的操作与时间具有紧密的联系,关于区块信息的缓存,需要对操作进行加锁确保操作的事务性. 流程如下所示:
人脸特征点提取采用 ERT(ensemble of regression trees)级联回归,即基于梯度提高学习的回归树方法。该算法使用级联回归因子,使用一系列标定好的人脸图片作为训练集,然后使用训练后的模型进行特征点提取。关于自定义模型训练及配置参考系统扩展部分.
二值化提取出轮廓
去掉同一条直线上的点,以及将直线变平滑(如90度角处理成45度)得到点集
再次去冗余。大概去掉距离比较近的点
最后得到的点类似于笔画拐点,点的个数也是mf特征的个数(两点一条直线一个特征,n个点闭合有n条直线,即有n个特征,最后提取的特征为直线的属性
MF特征计算
通过拐点提取特征点,取两个拐点的直线的中点坐标,直线长度,直线角度,最终提取到的特征
为便于项目扩展及前端移植,本项目中的前后端以RestfulAPI接口通过json数据进行交互.流程如下所示.
在本项目中,我们采用便于后续大数据处理Hadoop HDFS进行分布式文件存储,你也可以通过实现 hockshop-dfs项目中的DFS.java接口进行自定义文件存储系统,实现之后,修改hockshop-httpapi项目中的AppConfig.java中的 public DFS dfs(){} 方法,将其返回为你自定义类的实例化对象,最后重新打包部署项目。
为便于系统扩展及可维护性,我们对特征提取的java项目进行了接口规范,关于自定义特征提取的规范请参阅信息抽取标准化项目说明.
由于字数数量及语言种类数量繁多,将其全部纳入信息提取项目中尚有不妥,你可以根据需要从https://github.com/tesseract-ocr/tessdata下载对应的文字训练后数据至marmot项目中的resources/tessdata目录下,同时参照已有的内容及java文档注释修改marmot项目中TextImg.java文件和TextImg.java文件,修改之后,重新安装(mvn clean install
)marmot项目及httpapi项目.
在本项目中,人脸特征点的提取采用python开发.若你拥有足够数量的其他物体特征标注文件,你可以训练其他物品特征点提取的模型,关于模型训练及部署参阅py-face项目.
在本项目中,前后端是完全分离的,若有需要,你可以参阅http-api项目的http接口说明自定义前端或者其他平台的应用开发.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。