Merge branch 'dygraph' of https://github.com/PaddlePaddle/PaddleOCR into dygraph_rc
commit
7b53596ce6
File diff suppressed because it is too large
Load Diff
@ -1,130 +0,0 @@
|
|||||||
Global:
|
|
||||||
use_gpu: true
|
|
||||||
epoch_num: 1200
|
|
||||||
log_smooth_window: 20
|
|
||||||
print_batch_step: 2
|
|
||||||
save_model_dir: ./output/det_r50_vd/
|
|
||||||
save_epoch_step: 1200
|
|
||||||
# evaluation is run every 5000 iterations after the 4000th iteration
|
|
||||||
eval_batch_step: 8
|
|
||||||
# if pretrained_model is saved in static mode, load_static_weights must set to True
|
|
||||||
load_static_weights: True
|
|
||||||
cal_metric_during_train: False
|
|
||||||
pretrained_model: ./pretrain_models/ResNet50_vd_ssld_pretrained/
|
|
||||||
checkpoints:
|
|
||||||
save_inference_dir:
|
|
||||||
use_visualdl: True
|
|
||||||
infer_img: doc/imgs_en/img_10.jpg
|
|
||||||
save_res_path: ./output/det_db/predicts_db.txt
|
|
||||||
|
|
||||||
Optimizer:
|
|
||||||
name: Adam
|
|
||||||
beta1: 0.9
|
|
||||||
beta2: 0.999
|
|
||||||
learning_rate:
|
|
||||||
lr: 0.001
|
|
||||||
regularizer:
|
|
||||||
name: 'L2'
|
|
||||||
factor: 0
|
|
||||||
|
|
||||||
Architecture:
|
|
||||||
type: det
|
|
||||||
algorithm: DB
|
|
||||||
Transform:
|
|
||||||
Backbone:
|
|
||||||
name: ResNet
|
|
||||||
layers: 50
|
|
||||||
Neck:
|
|
||||||
name: FPN
|
|
||||||
out_channels: 256
|
|
||||||
Head:
|
|
||||||
name: DBHead
|
|
||||||
k: 50
|
|
||||||
|
|
||||||
Loss:
|
|
||||||
name: DBLoss
|
|
||||||
balance_loss: true
|
|
||||||
main_loss_type: DiceLoss
|
|
||||||
alpha: 5
|
|
||||||
beta: 10
|
|
||||||
ohem_ratio: 3
|
|
||||||
|
|
||||||
PostProcess:
|
|
||||||
name: DBPostProcess
|
|
||||||
thresh: 0.3
|
|
||||||
box_thresh: 0.6
|
|
||||||
max_candidates: 1000
|
|
||||||
unclip_ratio: 1.5
|
|
||||||
|
|
||||||
Metric:
|
|
||||||
name: DetMetric
|
|
||||||
main_indicator: hmean
|
|
||||||
|
|
||||||
TRAIN:
|
|
||||||
dataset:
|
|
||||||
name: SimpleDataSet
|
|
||||||
data_dir: ./detection/
|
|
||||||
file_list:
|
|
||||||
- ./detection/train_icdar2015_label.txt # dataset1
|
|
||||||
ratio_list: [1.0]
|
|
||||||
transforms:
|
|
||||||
- DecodeImage: # load image
|
|
||||||
img_mode: BGR
|
|
||||||
channel_first: False
|
|
||||||
- DetLabelEncode: # Class handling label
|
|
||||||
- IaaAugment:
|
|
||||||
augmenter_args:
|
|
||||||
- { 'type': Fliplr, 'args': { 'p': 0.5 } }
|
|
||||||
- { 'type': Affine, 'args': { 'rotate': [ -10,10 ] } }
|
|
||||||
- { 'type': Resize,'args': { 'size': [ 0.5,3 ] } }
|
|
||||||
- EastRandomCropData:
|
|
||||||
size: [ 640,640 ]
|
|
||||||
max_tries: 50
|
|
||||||
keep_ratio: true
|
|
||||||
- MakeBorderMap:
|
|
||||||
shrink_ratio: 0.4
|
|
||||||
thresh_min: 0.3
|
|
||||||
thresh_max: 0.7
|
|
||||||
- MakeShrinkMap:
|
|
||||||
shrink_ratio: 0.4
|
|
||||||
min_text_size: 8
|
|
||||||
- NormalizeImage:
|
|
||||||
scale: 1./255.
|
|
||||||
mean: [ 0.485, 0.456, 0.406 ]
|
|
||||||
std: [ 0.229, 0.224, 0.225 ]
|
|
||||||
order: 'hwc'
|
|
||||||
- ToCHWImage:
|
|
||||||
- keepKeys:
|
|
||||||
keep_keys: ['image','threshold_map','threshold_mask','shrink_map','shrink_mask'] # dataloader will return list in this order
|
|
||||||
loader:
|
|
||||||
shuffle: True
|
|
||||||
drop_last: False
|
|
||||||
batch_size: 16
|
|
||||||
num_workers: 8
|
|
||||||
|
|
||||||
EVAL:
|
|
||||||
dataset:
|
|
||||||
name: SimpleDataSet
|
|
||||||
data_dir: ./detection/
|
|
||||||
file_list:
|
|
||||||
- ./detection/test_icdar2015_label.txt
|
|
||||||
transforms:
|
|
||||||
- DecodeImage: # load image
|
|
||||||
img_mode: BGR
|
|
||||||
channel_first: False
|
|
||||||
- DetLabelEncode: # Class handling label
|
|
||||||
- DetResizeForTest:
|
|
||||||
image_shape: [736,1280]
|
|
||||||
- NormalizeImage:
|
|
||||||
scale: 1./255.
|
|
||||||
mean: [ 0.485, 0.456, 0.406 ]
|
|
||||||
std: [ 0.229, 0.224, 0.225 ]
|
|
||||||
order: 'hwc'
|
|
||||||
- ToCHWImage:
|
|
||||||
- keepKeys:
|
|
||||||
keep_keys: ['image','shape','polys','ignore_tags']
|
|
||||||
loader:
|
|
||||||
shuffle: False
|
|
||||||
drop_last: False
|
|
||||||
batch_size: 1 # must be 1
|
|
||||||
num_workers: 8
|
|
@ -1,106 +0,0 @@
|
|||||||
Global:
|
|
||||||
use_gpu: false
|
|
||||||
epoch_num: 500
|
|
||||||
log_smooth_window: 20
|
|
||||||
print_batch_step: 10
|
|
||||||
save_model_dir: ./output/rec/mv3_none_bilstm_ctc/
|
|
||||||
save_epoch_step: 500
|
|
||||||
# evaluation is run every 5000 iterations after the 4000th iteration
|
|
||||||
eval_batch_step: 127
|
|
||||||
# if pretrained_model is saved in static mode, load_static_weights must set to True
|
|
||||||
load_static_weights: True
|
|
||||||
cal_metric_during_train: True
|
|
||||||
pretrained_model:
|
|
||||||
checkpoints:
|
|
||||||
save_inference_dir:
|
|
||||||
use_visualdl: False
|
|
||||||
infer_img: doc/imgs_words/ch/word_1.jpg
|
|
||||||
# for data or label process
|
|
||||||
max_text_length: 80
|
|
||||||
character_dict_path: ppocr/utils/ppocr_keys_v1.txt
|
|
||||||
character_type: 'ch'
|
|
||||||
use_space_char: False
|
|
||||||
infer_mode: False
|
|
||||||
use_tps: False
|
|
||||||
|
|
||||||
|
|
||||||
Optimizer:
|
|
||||||
name: Adam
|
|
||||||
beta1: 0.9
|
|
||||||
beta2: 0.999
|
|
||||||
learning_rate:
|
|
||||||
lr: 0.001
|
|
||||||
regularizer:
|
|
||||||
name: 'L2'
|
|
||||||
factor: 0.00001
|
|
||||||
|
|
||||||
Architecture:
|
|
||||||
type: rec
|
|
||||||
algorithm: CRNN
|
|
||||||
Transform:
|
|
||||||
Backbone:
|
|
||||||
name: MobileNetV3
|
|
||||||
scale: 0.5
|
|
||||||
model_name: small
|
|
||||||
small_stride: [ 1, 2, 2, 2 ]
|
|
||||||
Neck:
|
|
||||||
name: SequenceEncoder
|
|
||||||
encoder_type: fc
|
|
||||||
hidden_size: 96
|
|
||||||
Head:
|
|
||||||
name: CTC
|
|
||||||
fc_decay: 0.00001
|
|
||||||
|
|
||||||
Loss:
|
|
||||||
name: CTCLoss
|
|
||||||
|
|
||||||
PostProcess:
|
|
||||||
name: CTCLabelDecode
|
|
||||||
|
|
||||||
Metric:
|
|
||||||
name: RecMetric
|
|
||||||
main_indicator: acc
|
|
||||||
|
|
||||||
TRAIN:
|
|
||||||
dataset:
|
|
||||||
name: SimpleDataSet
|
|
||||||
data_dir: ./rec
|
|
||||||
file_list:
|
|
||||||
- ./rec/train.txt # dataset1
|
|
||||||
ratio_list: [ 0.4,0.6 ]
|
|
||||||
transforms:
|
|
||||||
- DecodeImage: # load image
|
|
||||||
img_mode: BGR
|
|
||||||
channel_first: False
|
|
||||||
- CTCLabelEncode: # Class handling label
|
|
||||||
- RecAug:
|
|
||||||
- RecResizeImg:
|
|
||||||
image_shape: [ 3,32,320 ]
|
|
||||||
- keepKeys:
|
|
||||||
keep_keys: [ 'image','label','length' ] # dataloader will return list in this order
|
|
||||||
loader:
|
|
||||||
batch_size: 256
|
|
||||||
shuffle: True
|
|
||||||
drop_last: True
|
|
||||||
num_workers: 8
|
|
||||||
|
|
||||||
EVAL:
|
|
||||||
dataset:
|
|
||||||
name: SimpleDataSet
|
|
||||||
data_dir: ./rec
|
|
||||||
file_list:
|
|
||||||
- ./rec/val.txt
|
|
||||||
transforms:
|
|
||||||
- DecodeImage: # load image
|
|
||||||
img_mode: BGR
|
|
||||||
channel_first: False
|
|
||||||
- CTCLabelEncode: # Class handling label
|
|
||||||
- RecResizeImg:
|
|
||||||
image_shape: [ 3,32,320 ]
|
|
||||||
- keepKeys:
|
|
||||||
keep_keys: [ 'image','label','length' ] # dataloader will return list in this order
|
|
||||||
loader:
|
|
||||||
shuffle: False
|
|
||||||
drop_last: False
|
|
||||||
batch_size: 256
|
|
||||||
num_workers: 8
|
|
@ -1,104 +0,0 @@
|
|||||||
Global:
|
|
||||||
use_gpu: false
|
|
||||||
epoch_num: 500
|
|
||||||
log_smooth_window: 20
|
|
||||||
print_batch_step: 10
|
|
||||||
save_model_dir: ./output/rec/res34_none_bilstm_ctc/
|
|
||||||
save_epoch_step: 500
|
|
||||||
# evaluation is run every 5000 iterations after the 4000th iteration
|
|
||||||
eval_batch_step: 127
|
|
||||||
# if pretrained_model is saved in static mode, load_static_weights must set to True
|
|
||||||
load_static_weights: True
|
|
||||||
cal_metric_during_train: True
|
|
||||||
pretrained_model:
|
|
||||||
checkpoints:
|
|
||||||
save_inference_dir:
|
|
||||||
use_visualdl: False
|
|
||||||
infer_img: doc/imgs_words/ch/word_1.jpg
|
|
||||||
# for data or label process
|
|
||||||
max_text_length: 80
|
|
||||||
character_dict_path: ppocr/utils/ppocr_keys_v1.txt
|
|
||||||
character_type: 'ch'
|
|
||||||
use_space_char: False
|
|
||||||
infer_mode: False
|
|
||||||
use_tps: False
|
|
||||||
|
|
||||||
|
|
||||||
Optimizer:
|
|
||||||
name: Adam
|
|
||||||
beta1: 0.9
|
|
||||||
beta2: 0.999
|
|
||||||
learning_rate:
|
|
||||||
lr: 0.001
|
|
||||||
regularizer:
|
|
||||||
name: 'L2'
|
|
||||||
factor: 0.00001
|
|
||||||
|
|
||||||
Architecture:
|
|
||||||
type: rec
|
|
||||||
algorithm: CRNN
|
|
||||||
Transform:
|
|
||||||
Backbone:
|
|
||||||
name: ResNet
|
|
||||||
layers: 34
|
|
||||||
Neck:
|
|
||||||
name: SequenceEncoder
|
|
||||||
encoder_type: fc
|
|
||||||
hidden_size: 96
|
|
||||||
Head:
|
|
||||||
name: CTC
|
|
||||||
fc_decay: 0.00001
|
|
||||||
|
|
||||||
Loss:
|
|
||||||
name: CTCLoss
|
|
||||||
|
|
||||||
PostProcess:
|
|
||||||
name: CTCLabelDecode
|
|
||||||
|
|
||||||
Metric:
|
|
||||||
name: RecMetric
|
|
||||||
main_indicator: acc
|
|
||||||
|
|
||||||
TRAIN:
|
|
||||||
dataset:
|
|
||||||
name: SimpleDataSet
|
|
||||||
data_dir: ./rec
|
|
||||||
file_list:
|
|
||||||
- ./rec/train.txt # dataset1
|
|
||||||
ratio_list: [ 0.4,0.6 ]
|
|
||||||
transforms:
|
|
||||||
- DecodeImage: # load image
|
|
||||||
img_mode: BGR
|
|
||||||
channel_first: False
|
|
||||||
- CTCLabelEncode: # Class handling label
|
|
||||||
- RecAug:
|
|
||||||
- RecResizeImg:
|
|
||||||
image_shape: [ 3,32,320 ]
|
|
||||||
- keepKeys:
|
|
||||||
keep_keys: [ 'image','label','length' ] # dataloader will return list in this order
|
|
||||||
loader:
|
|
||||||
batch_size: 256
|
|
||||||
shuffle: True
|
|
||||||
drop_last: True
|
|
||||||
num_workers: 8
|
|
||||||
|
|
||||||
EVAL:
|
|
||||||
dataset:
|
|
||||||
name: SimpleDataSet
|
|
||||||
data_dir: ./rec
|
|
||||||
file_list:
|
|
||||||
- ./rec/val.txt
|
|
||||||
transforms:
|
|
||||||
- DecodeImage: # load image
|
|
||||||
img_mode: BGR
|
|
||||||
channel_first: False
|
|
||||||
- CTCLabelEncode: # Class handling label
|
|
||||||
- RecResizeImg:
|
|
||||||
image_shape: [ 3,32,320 ]
|
|
||||||
- keepKeys:
|
|
||||||
keep_keys: [ 'image','label','length' ] # dataloader will return list in this order
|
|
||||||
loader:
|
|
||||||
shuffle: False
|
|
||||||
drop_last: False
|
|
||||||
batch_size: 256
|
|
||||||
num_workers: 8
|
|
@ -1,9 +0,0 @@
|
|||||||
*.iml
|
|
||||||
.gradle
|
|
||||||
/local.properties
|
|
||||||
/.idea/*
|
|
||||||
.DS_Store
|
|
||||||
/build
|
|
||||||
/captures
|
|
||||||
.externalNativeBuild
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
/build
|
|
@ -1,94 +0,0 @@
|
|||||||
import java.security.MessageDigest
|
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdkVersion 29
|
|
||||||
defaultConfig {
|
|
||||||
applicationId "com.baidu.paddle.lite.demo.ocr"
|
|
||||||
minSdkVersion 23
|
|
||||||
targetSdkVersion 29
|
|
||||||
versionCode 1
|
|
||||||
versionName "1.0"
|
|
||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
|
||||||
externalNativeBuild {
|
|
||||||
cmake {
|
|
||||||
cppFlags "-std=c++11 -frtti -fexceptions -Wno-format"
|
|
||||||
arguments '-DANDROID_PLATFORM=android-23', '-DANDROID_STL=c++_shared' ,"-DANDROID_ARM_NEON=TRUE"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ndk {
|
|
||||||
// abiFilters "arm64-v8a", "armeabi-v7a"
|
|
||||||
abiFilters "arm64-v8a", "armeabi-v7a"
|
|
||||||
ldLibs "jnigraphics"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled false
|
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
externalNativeBuild {
|
|
||||||
cmake {
|
|
||||||
path "src/main/cpp/CMakeLists.txt"
|
|
||||||
version "3.10.2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
|
||||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
|
||||||
testImplementation 'junit:junit:4.12'
|
|
||||||
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
|
||||||
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
|
||||||
}
|
|
||||||
|
|
||||||
def archives = [
|
|
||||||
[
|
|
||||||
'src' : 'https://paddlelite-demo.bj.bcebos.com/libs/android/paddle_lite_libs_v2_6_1.tar.gz',
|
|
||||||
'dest': 'PaddleLite'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'src' : 'https://paddlelite-demo.bj.bcebos.com/libs/android/opencv-4.2.0-android-sdk.tar.gz',
|
|
||||||
'dest': 'OpenCV'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'src' : 'https://paddleocr.bj.bcebos.com/deploy/lite/ocr_v1_for_cpu.tar.gz',
|
|
||||||
'dest' : 'src/main/assets/models/ocr_v1_for_cpu'
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
task downloadAndExtractArchives(type: DefaultTask) {
|
|
||||||
doFirst {
|
|
||||||
println "Downloading and extracting archives including libs and models"
|
|
||||||
}
|
|
||||||
doLast {
|
|
||||||
// Prepare cache folder for archives
|
|
||||||
String cachePath = "cache"
|
|
||||||
if (!file("${cachePath}").exists()) {
|
|
||||||
mkdir "${cachePath}"
|
|
||||||
}
|
|
||||||
archives.eachWithIndex { archive, index ->
|
|
||||||
MessageDigest messageDigest = MessageDigest.getInstance('MD5')
|
|
||||||
messageDigest.update(archive.src.bytes)
|
|
||||||
String cacheName = new BigInteger(1, messageDigest.digest()).toString(32)
|
|
||||||
// Download the target archive if not exists
|
|
||||||
boolean copyFiles = !file("${archive.dest}").exists()
|
|
||||||
if (!file("${cachePath}/${cacheName}.tar.gz").exists()) {
|
|
||||||
ant.get(src: archive.src, dest: file("${cachePath}/${cacheName}.tar.gz"))
|
|
||||||
copyFiles = true; // force to copy files from the latest archive files
|
|
||||||
}
|
|
||||||
// Extract the target archive if its dest path does not exists
|
|
||||||
if (copyFiles) {
|
|
||||||
copy {
|
|
||||||
from tarTree("${cachePath}/${cacheName}.tar.gz")
|
|
||||||
into "${archive.dest}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
preBuild.dependsOn downloadAndExtractArchives
|
|
@ -1,21 +0,0 @@
|
|||||||
# Add project specific ProGuard rules here.
|
|
||||||
# You can control the set of applied configuration files using the
|
|
||||||
# proguardFiles setting in build.gradle.
|
|
||||||
#
|
|
||||||
# For more details, see
|
|
||||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
||||||
|
|
||||||
# If your project uses WebView with JS, uncomment the following
|
|
||||||
# and specify the fully qualified class name to the JavaScript interface
|
|
||||||
# class:
|
|
||||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
|
||||||
# public *;
|
|
||||||
#}
|
|
||||||
|
|
||||||
# Uncomment this to preserve the line number information for
|
|
||||||
# debugging stack traces.
|
|
||||||
#-keepattributes SourceFile,LineNumberTable
|
|
||||||
|
|
||||||
# If you keep the line number information, uncomment this to
|
|
||||||
# hide the original source file name.
|
|
||||||
#-renamesourcefileattribute SourceFile
|
|
@ -1,26 +0,0 @@
|
|||||||
package com.baidu.paddle.lite.demo.ocr;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.support.test.InstrumentationRegistry;
|
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instrumented test, which will execute on an Android device.
|
|
||||||
*
|
|
||||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
|
||||||
*/
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
|
||||||
public class ExampleInstrumentedTest {
|
|
||||||
@Test
|
|
||||||
public void useAppContext() {
|
|
||||||
// Context of the app under test.
|
|
||||||
Context appContext = InstrumentationRegistry.getTargetContext();
|
|
||||||
|
|
||||||
assertEquals("com.baidu.paddle.lite.demo", appContext.getPackageName());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="com.baidu.paddle.lite.demo.ocr">
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
|
||||||
<uses-permission android:name="android.permission.CAMERA"/>
|
|
||||||
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:allowBackup="true"
|
|
||||||
android:icon="@mipmap/ic_launcher"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
|
||||||
android:supportsRtl="true"
|
|
||||||
android:theme="@style/AppTheme">
|
|
||||||
<!-- to test MiniActivity, change this to com.baidu.paddle.lite.demo.ocr.MiniActivity -->
|
|
||||||
<activity android:name="com.baidu.paddle.lite.demo.ocr.MainActivity">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:name="com.baidu.paddle.lite.demo.ocr.SettingsActivity"
|
|
||||||
android:label="Settings">
|
|
||||||
</activity>
|
|
||||||
<provider
|
|
||||||
android:name="androidx.core.content.FileProvider"
|
|
||||||
android:authorities="com.baidu.paddle.lite.demo.ocr.fileprovider"
|
|
||||||
android:exported="false"
|
|
||||||
android:grantUriPermissions="true">
|
|
||||||
<meta-data
|
|
||||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
|
||||||
android:resource="@xml/file_paths"></meta-data>
|
|
||||||
</provider>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
</manifest>
|
|
Before Width: | Height: | Size: 62 KiB |
File diff suppressed because it is too large
Load Diff
@ -1,117 +0,0 @@
|
|||||||
# For more information about using CMake with Android Studio, read the
|
|
||||||
# documentation: https://d.android.com/studio/projects/add-native-code.html
|
|
||||||
|
|
||||||
# Sets the minimum version of CMake required to build the native library.
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.4.1)
|
|
||||||
|
|
||||||
# Creates and names a library, sets it as either STATIC or SHARED, and provides
|
|
||||||
# the relative paths to its source code. You can define multiple libraries, and
|
|
||||||
# CMake builds them for you. Gradle automatically packages shared libraries with
|
|
||||||
# your APK.
|
|
||||||
|
|
||||||
set(PaddleLite_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../PaddleLite")
|
|
||||||
include_directories(${PaddleLite_DIR}/cxx/include)
|
|
||||||
|
|
||||||
set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../OpenCV/sdk/native/jni")
|
|
||||||
message(STATUS "opencv dir: ${OpenCV_DIR}")
|
|
||||||
find_package(OpenCV REQUIRED)
|
|
||||||
message(STATUS "OpenCV libraries: ${OpenCV_LIBS}")
|
|
||||||
include_directories(${OpenCV_INCLUDE_DIRS})
|
|
||||||
aux_source_directory(. SOURCES)
|
|
||||||
set(CMAKE_CXX_FLAGS
|
|
||||||
"${CMAKE_CXX_FLAGS} -ffast-math -Ofast -Os"
|
|
||||||
)
|
|
||||||
set(CMAKE_CXX_FLAGS
|
|
||||||
"${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden -fdata-sections -ffunction-sections"
|
|
||||||
)
|
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS
|
|
||||||
"${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,-z,nocopyreloc")
|
|
||||||
|
|
||||||
add_library(
|
|
||||||
# Sets the name of the library.
|
|
||||||
Native
|
|
||||||
# Sets the library as a shared library.
|
|
||||||
SHARED
|
|
||||||
# Provides a relative path to your source file(s).
|
|
||||||
${SOURCES})
|
|
||||||
|
|
||||||
find_library(
|
|
||||||
# Sets the name of the path variable.
|
|
||||||
log-lib
|
|
||||||
# Specifies the name of the NDK library that you want CMake to locate.
|
|
||||||
log)
|
|
||||||
|
|
||||||
add_library(
|
|
||||||
# Sets the name of the library.
|
|
||||||
paddle_light_api_shared
|
|
||||||
# Sets the library as a shared library.
|
|
||||||
SHARED
|
|
||||||
# Provides a relative path to your source file(s).
|
|
||||||
IMPORTED)
|
|
||||||
|
|
||||||
set_target_properties(
|
|
||||||
# Specifies the target library.
|
|
||||||
paddle_light_api_shared
|
|
||||||
# Specifies the parameter you want to define.
|
|
||||||
PROPERTIES
|
|
||||||
IMPORTED_LOCATION
|
|
||||||
${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libpaddle_light_api_shared.so
|
|
||||||
# Provides the path to the library you want to import.
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# Specifies libraries CMake should link to your target library. You can link
|
|
||||||
# multiple libraries, such as libraries you define in this build script,
|
|
||||||
# prebuilt third-party libraries, or system libraries.
|
|
||||||
|
|
||||||
target_link_libraries(
|
|
||||||
# Specifies the target library.
|
|
||||||
Native
|
|
||||||
paddle_light_api_shared
|
|
||||||
${OpenCV_LIBS}
|
|
||||||
GLESv2
|
|
||||||
EGL
|
|
||||||
jnigraphics
|
|
||||||
${log-lib}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
TARGET Native
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
${CMAKE_COMMAND} -E copy
|
|
||||||
${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libc++_shared.so
|
|
||||||
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libc++_shared.so)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
TARGET Native
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
${CMAKE_COMMAND} -E copy
|
|
||||||
${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libpaddle_light_api_shared.so
|
|
||||||
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libpaddle_light_api_shared.so)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
TARGET Native
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
${CMAKE_COMMAND} -E copy
|
|
||||||
${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libhiai.so
|
|
||||||
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libhiai.so)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
TARGET Native
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
${CMAKE_COMMAND} -E copy
|
|
||||||
${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libhiai_ir.so
|
|
||||||
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libhiai_ir.so)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
TARGET Native
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
${CMAKE_COMMAND} -E copy
|
|
||||||
${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libhiai_ir_build.so
|
|
||||||
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libhiai_ir_build.so)
|
|
@ -1,48 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by fu on 4/25/18.
|
|
||||||
//
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#import <vector>
|
|
||||||
#import <numeric>
|
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
|
||||||
|
|
||||||
#include <android/log.h>
|
|
||||||
|
|
||||||
#define LOG_TAG "OCR_NDK"
|
|
||||||
|
|
||||||
#define LOGI(...) \
|
|
||||||
__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
|
|
||||||
#define LOGW(...) \
|
|
||||||
__android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
|
|
||||||
#define LOGE(...) \
|
|
||||||
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
|
|
||||||
#else
|
|
||||||
#include <stdio.h>
|
|
||||||
#define LOGI(format, ...) \
|
|
||||||
fprintf(stdout, "[" LOG_TAG "]" format "\n", ##__VA_ARGS__)
|
|
||||||
#define LOGW(format, ...) \
|
|
||||||
fprintf(stdout, "[" LOG_TAG "]" format "\n", ##__VA_ARGS__)
|
|
||||||
#define LOGE(format, ...) \
|
|
||||||
fprintf(stderr, "[" LOG_TAG "]Error: " format "\n", ##__VA_ARGS__)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum RETURN_CODE {
|
|
||||||
RETURN_OK = 0
|
|
||||||
};
|
|
||||||
|
|
||||||
enum NET_TYPE{
|
|
||||||
NET_OCR = 900100,
|
|
||||||
NET_OCR_INTERNAL = 991008
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline T product(const std::vector<T> &vec) {
|
|
||||||
if (vec.empty()){
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return std::accumulate(vec.begin(), vec.end(), 1, std::multiplies<T>());
|
|
||||||
}
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue