This commit is contained in:
oneao committed 2025-07-03 17:26:10 +08:00
1 parent d4f57850a1
commit 417834bd13
6 files changed
+141 -27

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 KiB

@@ -1,38 +1,88 @@
package com.crane.test;
import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Base64;
import javax.imageio.*;
import javax.imageio.stream.ImageOutputStream;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import okhttp3.*;
public class Test {
public static byte[] compressImageToTargetSize(BufferedImage image, float initialQuality, int maxSizeKB) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
float quality = initialQuality;
int maxBytes = maxSizeKB * 1024;
while (quality > 0.05f) {
baos.reset();
ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam();
jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
jpgWriteParam.setCompressionQuality(quality); // 0.0 ~ 1.0
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
jpgWriter.setOutput(ios);
jpgWriter.write(null, new IIOImage(image, null, null), jpgWriteParam);
jpgWriter.dispose();
ios.close();
if (baos.size() <= maxBytes) {
break;
}
quality -= 0.05f;
}
return baos.toByteArray();
}
public static void saveCompressedImageToFile(byte[] imageBytes, String outputPath) throws IOException {
try (FileOutputStream fos = new FileOutputStream(outputPath)) {
fos.write(imageBytes);
}
System.out.println("✅ 压缩图像已保存到: " + outputPath);
}
public class Test{
public static void main(String[] args) throws IOException {
String API_URL = "http://localhost:8866/ocr";
String imagePath = "D:\\workspace\\code\\crane\\crane-api\\crane-test\\src\\main\\java\\com\\crane\\test\\namorni-preprava-namorni-doprava-kamionova-doprava-kontejneru-2-1024x768.jpg";
String compressedImagePath = "D:\\workspace\\code\\crane\\crane-api\\crane-test\\compressed.jpg";
File file = new File(imagePath);
long base64StartTime = System.nanoTime();
byte[] fileContent = java.nio.file.Files.readAllBytes(file.toPath());
String base64Image = Base64.getEncoder().encodeToString(fileContent);
long base64EndTime = System.nanoTime();
long durationMs1 = (base64EndTime - base64StartTime) / 1_000_000; // 毫秒
// 1. 加载原始图像
BufferedImage originalImage = ImageIO.read(new File(imagePath));
System.out.println("图片转 BASE64 耗时: " + durationMs1 + " ms");
BufferedImage resizedImage = originalImage; // 保持原图尺寸不变
// 3. 压缩图片到小于 500KB
byte[] compressedBytes = compressImageToTargetSize(resizedImage, 1f, 5000);
System.out.println("压缩后图片大小: " + (compressedBytes.length / 1024) + " KB");
// 👉 保存压缩图像到本地
saveCompressedImageToFile(compressedBytes, compressedImagePath);
// 4. 转为 Base64 编码
String base64Image = Base64.getEncoder().encodeToString(compressedBytes);
long base64EndTime = System.nanoTime();
long durationMs1 = (base64EndTime - base64StartTime) / 1_000_000;
System.out.println("图片压缩 + BASE64 编码耗时: " + durationMs1 + " ms");
// 5. 构建请求
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode payload = objectMapper.createObjectNode();
payload.put("file", base64Image);
payload.put("fileType", 1);
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(300, java.util.concurrent.TimeUnit.SECONDS) // 连接超时,建议20-30秒
.writeTimeout(300, java.util.concurrent.TimeUnit.SECONDS) // 写请求体超时
.readTimeout(300, java.util.concurrent.TimeUnit.SECONDS) // 读取响应超时,OCR服务响应较慢可设置长点
.connectTimeout(300, java.util.concurrent.TimeUnit.SECONDS)
.writeTimeout(300, java.util.concurrent.TimeUnit.SECONDS)
.readTimeout(300, java.util.concurrent.TimeUnit.SECONDS)
.build();
MediaType JSON = MediaType.get("application/json; charset=utf-8");
@@ -44,26 +94,21 @@ public class Test{
.build();
long startTime = System.nanoTime();
try (Response response = client.newCall(request).execute()) {
long endTime = System.nanoTime();
long durationMs = (endTime - startTime) / 1_000_000; // 毫秒
long durationMs = (endTime - startTime) / 1_000_000;
System.out.println("⏱️ 请求耗时: " + durationMs + " ms");
if (response.isSuccessful()) {
String responseBody = response.body().string();
JsonNode root = objectMapper.readTree(responseBody);
JsonNode result = root.get("result");
JsonNode ocrResults = result.get("ocrResults");
for (int i = 0; i < ocrResults.size(); i++) {
JsonNode item = ocrResults.get(i);
JsonNode prunedResult = item.get("prunedResult");
System.out.println(prunedResult);
// 获取 rec_texts 并打印
JsonNode recTexts = prunedResult.get("rec_texts");
if (recTexts != null && recTexts.isArray()) {
System.out.println("📦 rec_texts:");
Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 KiB

@@ -0,0 +1,37 @@
# 相关网站
- github:https://github.com/PaddlePaddle/PaddleNLP/tree/develop
- 官网:
# 报错
## AttributeError: module 'h11' has no attribute 'Event'. Did you mean: '_events'?
```bash
pip install "h11==0.14.0" --force-reinstall
```
## ImportError: cannot import name 'download' from 'aistudio_sdk.hub'
```bash
pip install aistudio-sdk==0.2.6
```
## ValueError: Unknown argument: show_log
```
pip install paddleocr==2.10
```
+1 -1
View File
@@ -29,7 +29,7 @@ PaddleX 3.0 是基于飞桨框架构建的低代码开发工具,它集成了
# CPU 版本
python -m pip install paddlepaddle==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
# GPU 版本,需显卡驱动程序版本 ≥450.80.02(Linux)或 ≥452.39(Windows)
# GPU 版本,需显卡驱动程序版本 ≥450.80.02(Linux)或 ≥452.39(Windows)(当前使用的是这个版本测试的)
python -m pip install paddlepaddle-gpu==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
# GPU 版本,需显卡驱动程序版本 ≥550.54.14(Linux)或 ≥550.54.14(Windows)
+33 -1
View File
@@ -149,9 +149,41 @@ pip install pyinstaller
pyrcc5 -o libs/resources.py resources.qrc
# 打包可执行程序
pyinstaller -c PPOCRLabel.py --collect-all paddleocr --collect-all pyclipper --collect-all imghdr --collect-all skimage --collect-all imgaug --collect-all scipy.io --collect-all lmdb --collect-all paddle --hidden-import=pyqt5 -p ./libs -p ./ -p ./data -p ./resources -F
pyinstaller -c PPOCRLabel.py --add-data "D:\\devtool/anaconda3\\envs\\ppocrlabel\\Lib\\site-packages\\paddlex;./paddlex" --collect-all paddleocr --collect-all pyclipper --collect-all imghdr --collect-all skimage --collect-all imgaug --collect-all scipy.io --collect-all lmdb --collect-all paddle --hidden-import=pyqt5 -p ./libs -p ./ -p ./data -p ./resources -F
pyinstaller -F -w --clean --add-data "D:/devtool/anaconda3/envs/ppocrlabel/Lib/site-packages/paddlex;./paddlex" --collect-all paddleocr --collect-all pyclipper --collect-all imghdr --collect-all skimage --collect-all imgaug --collect-all scipy.io --collect-all lmdb --collect-all paddle --collect-submodules paddleocr --collect-submodules paddlex --collect-submodules paddlex.inference.pipelines --collect-submodules paddlex.utils --collect-submodules paddlex.visualize --collect-submodules paddlex.cv.models --hidden-import=pyqt5 --hidden-import=shapely --hidden-import=visualdl --hidden-import=skimage.metrics -p ./libs -p ./ -p ./data -p ./resources PPOCRLabel.py
# 运行dist中的可执行程序,以windows为例
PPOCRLabel.exe --lang ch
```
## 报错
### DLL load failed while importing aggregations
**conda虚拟环境下**报这个错误,解决方案
```bash
conda install pandas
```
验证
```python
import pandas as pd
print(pd.__version__)
df = pd.DataFrame({"a": [1, 2], "b": [3, 4]})
print(df)
```
输出下面结果,代表成功
```
2.3.0
a b
0 1 3
1 2 4
```