异常报错:Caused by: org.flowable.common.engine.api.FlowableWrongDbException: version mismatch: library version is '6.7.1.0', db version is 5.99.0.0
原因:

  • 数据库缺少相关表和数据,导入flowable相关表即可。版本数据存在 act_ge_prperty
  • 数据库没有设置不区分大小写,设置 lower_case_table_names=1
  • 使用的mycat 1.6.7.4 版本,升级到 1.6.7.6 版本可避免

现在市面上有很多文档存储管理的云服务,比如坚果云。这些服务除了提供文件存储之外,高级功能都提供文件内容的搜索服务。
那么文件内容搜索有什么用呢?当我们需要查找文件时,一般都是查找文件名,但是很多时候我们不太记得文件名,只记得几个关键字词,需要根据这些关键字词查找到对应的文档。
如果自行开发文档全文搜索程序,简单的思路如下:

  • 对于标准文档内容,比如PDF(非扫描版)、微软 Office、TXT等等,可直接使用 Apache Tika 读取文件的内容。
  • 对于非标准的文档内容,比如扫描档PDF、图片等可使用OCR工具识别出文件里的内容。将PDF转换成图片,然后使用PaddleOCR识别
  • 对于读取到的文本内容,存储到 Elasticsearch
  • 从ES中查找关键字信息即可。

在AWS上购买了一台1v,512M配置的lightsail,除了用作网络跳转之外平时都是100%空闲。如果不好好利用起来,感觉每月$3.5的花费挺不值。因此就打算部署一套博客,平时也一直有使用Onenote记笔记的习惯,就打算让这个博客当作补充,毕竟不出意外,这台低配VPN会一直续租下去。
对于搭建博客起先想到的是Wordpress,也成功部署了,但是由于这台服务器的配置实在太低而且MySQL部署在腾讯云上,每次点击都需等上好几秒,遂放弃使用Wordpress。
鉴于该台服务器的配置,决定只用来部署静态网站,后面确定选用Hexo

系统配置

  • 操作系统:Ubuntu20.04
  • 资源:1核、512M内存、20G硬盘

安装Node

  • 安装Node 16,如果安装其它版本,请将 setup_16.x 中的 16 改成对应的大版本号即可,比如 15、14等 \
    1
    curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
    1
    sudo apt-get install -y nodejs
  • 检查Node及npm版本,正确安装后会有版本号输出
    1
    2
    node --version
    npm --version

安装Hexo

  • 安装hexo-cli
    1
    npm install hexo-cli -g

创建项目

  • 创建一个 hexo 项目,命名为 blog
    1
    cd /srv
    1
    hexo init blog
    1
    cd blog

部署项目

  • 生产网站的静态文件

    1
    hexo g

    此时,blog 目录下会生产一个 public 目录,里面就是网站需要的文件

  • 安装 nginx ,并且修改 nginx.conf 文件,在 etc/nginx 目录下可找到。添加下面配置。

    1
    2
    3
    4
    5
    6
    7
    8
    server {
    listen 80;
    server_name blogServer;
    autoindex_localtime on;
    client_max_body_size 1200M;
    root /srv/blog/public;
    index index.html;
    }

    其中 server 中的 root 需要指向生产的 public 目录

  • 启动 nginx 后即可访问你的博客

新增文章

-

1
2
cd /srv/blog
hexo new "你文章的标题"

此时在 source/_posts 目录下会生成相应的 .md 文件

删除文章

  • 直接删除 source/_posts 中的文章文件
  • 程序生成静态文件
    1
    hexo g
    即可更新网站

使用PaddleOCR可方便地识别图片中的文字信息。PaddlePaddle可在Windows、Linux、Mac等系统上快速安装。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from paddleocr import PaddleOCR, draw_ocr
from PIL import Image
import datetime
import os


def ocr_img(path,name,out_path):
# 开始时间
startTime_pdf2img = datetime.datetime.now()
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
pathDir = os.listdir(path)
i = 0
ocr_text = []
for allDir in pathDir:
img_path = os.path.join('%s%s' % (path, allDir))
print(img_path)
result = ocr.ocr(img_path, cls=True)
# image = Image.open(img_path).convert('RGB')
# boxes = [line[0] for line in result]
# 识别出的文字
# txts = [line[1][0] for line in result]
# scores = [line[1][1] for line in result]
# im_show = draw_ocr(image, boxes, txts, scores)
# im_show = Image.fromarray(im_show)
# im_show.save(out_path + '/' + name + "_" + str(i) + ".jpg")
for line in result:
# print(line[1][0])
ocr_text.append(str(line[1][0]))
i = i + 1
# 结束时间
endTime_pdf2img = datetime.datetime.now()
print(str(i) + ' 张图片总用时', (endTime_pdf2img - startTime_pdf2img).seconds,'S')
# print(ocr_text)
if ocr_text:
file_path = os.path.join(out_path,name+'.txt')
with open(file_path,'w',encoding='utf-8') as f:
for line in ocr_text:
f.write(line+'\n')

if __name__ == "__main__":
img_path = 'F:\\ocr\\anaconda\\imgs\\'
out_path = 'F:\\ocr\\anaconda\\txt'
ocr_img(img_path,'images',out_path)

Paddle对于识别中文有很好的精度,能够在项目中开箱即用。

0%