프로그래밍/Php

easyOCR 이미지 한글 추출 기능 (php, python, fetch 사용)

소행성왕자 2021. 10. 28. 11:14

easyOCR 을 이용하여 한글을 추출해 보도록 하겠습니다.

결과 화면 보시고 분석하도록 할께요. 

OCR 분석중

OCR 분석중

OCR 결과

OCR 분석 결과

 

OCR 해석하기 위한 프로그램 순서는 아래와 같습니다.

  1. 첨부파일 업로드
  2. 업로드된 첨부파일로 easyOCR 분석
  3. 분석완료된 결과 출력

해당 프로그램은 php 로 파일업로드 기능을 수행한 뒤

파이썬을 이용하여 OCR 분석한다.

index.php

<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

<style>
.loader {
  border: 16px solid #f3f3f3; /* Light grey */
  border-top: 16px solid #3498db; /* Blue */
  border-radius: 50%;
  width: 120px;
  height: 120px;
  animation: spin 2s linear infinite;
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

#result {
	width:90%;
	padding: 10px;
	margin: 10px;
	border: 1px solid red;
}
#result_explode {
        width:90%;
        padding: 10px;
        margin: 10px;
	border: 1px solid blue;
}

</style>
</head>
<body>
<!-- 
<form method="post" enctype="multipart/form-data" action="http://221.146.90.7/fileUpload.php">
<input type="file" name="file">
<input type="submit">
</form>
-->

<p><input type="file" name="sample_image" /> </p>
<div class="text-center" id="uploaded_image"></div>

<div class="text-center" id="result"></div>

<div class="text-center" id="result_explode"></div>

<div class="loader" id="loading" style="display:none"><br><br>OCR 분성중....<br>1분이상....<br>오래걸림</div>

<script>
const sample_image = document.getElementsByName('sample_image')[0];
sample_image.addEventListener('change', () => {
	upload_image(sample_image.files[0]);
	clear();
});



const upload_image = (file) => {
    // check file type
    if(!['image/jpeg', 'image/png'].includes(file.type))
	{
		document.getElementById('uploaded_image').innerHTML = '<div class="alert alert-danger">Only .jpg and .png image are allowed</div>';
		document.getElementsByName('sample_image')[0].value = '';
       return;
    }

    // check file size (< 2MB)
    if(file.size > 2 * 1024 * 1024)
    {
    	document.getElementById('uploaded_image').innerHTML = '<div class="alert alert-danger">File must be less than 2 MB</div>';

    	document.getElementsByName('sample_image')[0].value = '';
        return;
    }

    const form_data = new FormData();

    form_data.append('sample_image', file);

    fetch("fileUpload.php", {
    	method:"POST",
    	body : form_data
    }).then(function(response){
    	return response.json();
    }).then(function(responseData){

    	document.getElementById('uploaded_image').innerHTML = '<img src="'+responseData.image_source+'" class="img-thumbnail" />';

    	document.getElementsByName('sample_image')[0].value = '';


	easyOCR(responseData.image_source);

    }); 
}

const clear =_=>{
	document.getElementById('result').style.display = 'none';
	document.getElementById('result_explode').style.display = 'none';	
}

const show =_=>{
	document.getElementById('result').style.display = 'block';
        document.getElementById('result_explode').style.display = 'block';      
}

const easyOCR = fn => {
	document.getElementById('loading').style.display = 'block';

	fetch("php_py_exec.php?"+new URLSearchParams({
		fn: fn
	}), {
		method:"GET",
		
	}).then(function(response) {
		document.getElementById('loading').style.display = 'none';
		return response.json();

	}).then(function(responseData) {
		show();
		console.log(responseData.result);
		console.log(responseData.result_explode);
		document.getElementById('result').innerHTML = responseData.result;
		document.getElementById('result_explode').innerHTML = responseData.result_explode;

	});
}



</script>

</body>
</html>

fileUpload.php

<?php
set_time_limit(0);


if(isset($_FILES['sample_image']))
{

	$extension = pathinfo($_FILES['sample_image']['name'], PATHINFO_EXTENSION);
	$new_name = time() . '.' . $extension;
	move_uploaded_file($_FILES['sample_image']['tmp_name'], 'data/' . $new_name);
	$data = array(
		'image_source' => 'data/' . $new_name
	);
	echo json_encode($data);

}


/*
$fullPath = '/home/naya/www/data/example.jpeg';
exec("PYTHONIOENCODING=utf-8 python3 /home/naya/easyOCR-binary-centos-main/tests/php_client.py $fullPath 2>&1", $output);

$result = $output[0];
$arr2 = explode("),", $result);
print_r($arr2);

exit;
*/

/*
$allowedExts = array("gif", "jpeg", "jpg", "png");

if (isset($_FILES)) {
    $file = $_FILES["file"];
    $error = $file["error"];
    $name = $file["name"];
    $type = $file["type"];
    $size = $file["size"];
    $tmp_name = $file["tmp_name"];
   
    if ( $error > 0 ) {
        echo "Error: " . $error . "<br>";
    }
    else {
        $temp = explode(".", $name);
        $extension = end($temp);
       
        if ( ($size/1024/1024) < 200. && in_array($extension, $allowedExts) ) {
            //echo "Upload: " . $name . "<br>";
            //echo "Type: " . $type . "<br>";
            //echo "Size: " . ($size / 1024 / 1024) . " Mb<br>";
            //echo "Stored in: " . $tmp_name;
            if (file_exists("data/" . $name)) {
                echo $name . " already exists. ";
            }
            else {
                move_uploaded_file($tmp_name, "data/" . $name);
                echo "Stored in: " . "data/" . $name;
            }
        }
        else {
            echo ($size/1024/1024) . " Mbyte is bigger than 2 Mb ";
            echo $extension . "format file is not allowed to upload ! ";
        }
    }
}
else {
    echo "File is not selected";
}

//Header("Location: php_py_exec.php?fn=$name");
*/


?>

php_py_exec.php

<?php
set_time_limit(0);
$fn = $_GET['fn'];

$fullPath = '/home/ㅋㅋㅋ/www/'.$fn;
exec("PYTHONIOENCODING=utf-8 python3 /home/ㅋㅋㅋ/easyOCR-binary-centos-main/tests/php_client.py $fullPath 2>&1", $output);

$result = $output[0];
$arr2 = implode("<br>",explode("),", $result));

$res = [];
$res['result'] = $result;
$res['result_explode'] = $arr2;

echo json_encode($res);