rust报错信息

函数外使用let

在rust代码中直接复制示例代码时发现,以下代码编译会报错:

1
2
3
4
5
6
7
let values = vec![1, 2, 3, 4, 5];
for x in values {
println!("{x}");
}
// 会报错:
// error: expected item, found keyword `let`
// 这个报错信息让人 很难找到原因

阅读全文

Element框架虚拟滚动树形表格

 公司项目是基于Vue+Element,需要在页面做一个虚拟滚动的树形表格(因为要显示的内容太多会导致卡顿,而领导又不希望看到分页一页页地翻,所以只能通过虚拟滚动来解决性能问题)。
 参考了别人的文章,虚拟滚动的主要原理是,把实际显示的内容过滤出来,然后把没显示的内容使用一个元素把位置占住,保住滚动条跟以前一样。当滚动条移动时,动态计算要显示的内容,占位元素的高度不断的变化即可。为了方便计算高度,所以表格的高度、表格内容的行的高度都要确定下来。完整的代码示例放到github,可自行下载运行查看:

阅读全文

opencv在vs打包setup后isOpened返回false的问题

现象与解决

开发环境:opencv4.6 , vs 2022。本地开发调试时打开视频是正常的:

1
2
3
4
5
6
VideoCapture cap;
cap.open(path);
if (!cap.isOpened()) { // check if we succeeded
std::cerr << "Couldn't open capture." << std::endl;
return -1;
}

阅读全文

tesseract识别中文输出乱码问题

问题现象

 最近搞的玩意需要用到文字识别,下载测试tesseract效果是不错的,安装完后直接用cmd命令行测试,没啥问题能正常识别中文:

1
tesseract test.jpg stdout -l chi_sim

 由于在c++项目里要想引用打包,所以就又用vcpkg安装一下,在程序调试时把识别库tessdata放好(可以设置环境变量TESSDATA_PREFIX,或者api->Init函数初始化时声明路径),初始化设置中文库,跑简单官方demo,发现输出结果是乱码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
char* outText;

tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();

// Initialize tesseract-ocr with English, without specifying tessdata path
if (api->Init(NULL, "chi_sim")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}

// Open input image with leptonica library
Pix* image = pixRead(argv[1]);
api->SetImage(image);

// Get OCR result
outText = api->GetUTF8Text();

printf("OCR output:\n%s", outText);

 尝试验证几次,搜索后发现原来是cmd的字体编码问题,需要把cmd设置成支持utf8中文字体,添加这个函数使用就输出正常了:
1
2
3
4
// windows 系统下 设置成支持utf8中文显示
void windows_cmd_support_utf8(void) {
system("chcp 65001 & cls");
}

阅读全文

一次DOM数量大增的性能问题定位记录

 最近开发时,发现有个页面使用一个canvas库:konvajs加载图纸时,发现用时比较久,而且在Chrome性能监测面板Performance monitor发现会有DOM数量大增的问题。在几千DOM元素,一下子增加了几万DOM元素。

阅读全文