Support more languages

This commit is contained in:
2021-09-17 21:35:39 +05:30
parent 2a9675c5b8
commit 21b7ef353a
3 changed files with 21 additions and 6 deletions
+9 -3
View File
@@ -5,11 +5,11 @@
* Copyright 2020 Harish.K<harish2704@gmail.com> * Copyright 2020 Harish.K<harish2704@gmail.com>
*/ */
function ocrByServer(image) { function ocrByServer(image, opts) {
var data = new FormData(); var data = new FormData();
data.append("image", image); data.append("image", image);
return fetch( return fetch(
"./ocr", "./ocr?lang="+opts.lang.join(':'),
{ {
method: "POST", method: "POST",
body: data, body: data,
@@ -28,11 +28,17 @@ new Vue({
currentFileBlob: null, currentFileBlob: null,
isLoading: false, isLoading: false,
ocrOutput: "", ocrOutput: "",
availableLangs:[
{ label: 'Malayalam', code: 'mal' },
{ label: 'English', code: 'eng' },
{ label: 'Hindi', code: 'hin' },
],
selectedLangs:['mal']
}, },
methods: { methods: {
doOcr: function () { doOcr: function () {
this.isLoading = true; this.isLoading = true;
ocrByServer(this.currentFileBlob) ocrByServer(this.currentFileBlob, { lang: this.selectedLangs })
.then((data) => { .then((data) => {
console.log("success", data); console.log("success", data);
this.ocrOutput = data.text; this.ocrOutput = data.text;
+11 -2
View File
@@ -50,7 +50,7 @@
readonly readonly
v-model="selectedFileName" v-model="selectedFileName"
class="form-control" class="form-control"
placeholder="Choose a file..." placeholder="Choose an image..."
@click="$refs.file_input.click()" @click="$refs.file_input.click()"
/> />
<div class="input-group-append"> <div class="input-group-append">
@@ -59,7 +59,7 @@
type="button" type="button"
@click="$refs.file_input.click()" @click="$refs.file_input.click()"
> >
Choose another image Choose an image
</button> </button>
<button <button
class="btn btn-success pull-right" class="btn btn-success pull-right"
@@ -78,6 +78,15 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-6 col-md-12">
<div class="form-group row">
<label for="inputEmail3" class="col-form-label mr-3" >Language</label>
<div class="form-check form-check-inline" v-for="lang in availableLangs" :key="lang.code" >
<input class="form-check-input" type="checkbox" :id="`lang-${lang.code}`" v-model="selectedLangs" :value="lang.code" />
<label class="form-check-label" :for="`lang-${lang.code}`" >{{lang.label}}</label >
</div>
</div>
</div>
</div> </div>
<div class="row w-100"> <div class="row w-100">
+1 -1
View File
@@ -17,7 +17,7 @@ module.exports = async function (fastify, opts) {
const data = await req.file(); const data = await req.file();
const uid = crypto.randomBytes(16).toString("hex"); const uid = crypto.randomBytes(16).toString("hex");
const filename = `${UPLOAD_PATH}/${uid}.${mime.extension(data.mimetype)}`; const filename = `${UPLOAD_PATH}/${uid}.${mime.extension(data.mimetype)}`;
const lang = "mal+eng"; const lang = req.query.lang ? req.query.lang.replace(/:/g, "+") : "mal";
await pump(data.file, fs.createWriteStream(filename)); await pump(data.file, fs.createWriteStream(filename));
const args = [filename, "stdout", "-l", lang]; const args = [filename, "stdout", "-l", lang];
const { stdout, stderr } = await exec("tesseract", args); const { stdout, stderr } = await exec("tesseract", args);