Я хочу выполнить эту команду для всех файлов в каталоге.
tesseract /home/kong/Documents/input/248.jpg stdout --psm 1 --oem 1 --dpi 300 tsv >/home/kong/Documents/input/ocr_output/input/248.tsv
Ввод и вывод должен иметь то же число как 248.jpg
и 248.tsv
. Я пытался писать сценарий Python, и он вызывает проблемы разделителя.
Кто-то может помочь мне с этим? Я - новичок удара.
Это - сценарий Python, который я записал
comm = shlex.split(command)
out_dir = '/home/kong/Documents/input/ocr_output/input'
for file in tqdm(files):
base_name = os.path.basename(file)
number = base_name.split('.')[0]
out_path = '>' + out_dir + '/' + number + '.tsv'
comm[1] = file
comm[-1] = out_path
# tsv = number + '.tsv'
with open(out_path, 'w') as f:
subprocess.run(comm, shell=True, stdout=f)
Попробуйте это:
source_dir=/your/source/dir
output_dir=/your/output/dir
cd "$source_dir" || exit
for file in *.jpg; do
tesseract "$file" stdout --psm 1 --oem 1 --dpi 300 tsv > "$output_dir/${file%.jpg}.tsv"
done
Так же, как альтернатива можно использовать этот сценарий с Python 3.5 или выше.
import os
import subprocess as sp
# input directory
in_dir = '/home/kong/Documents/input/'
# output directory
out_dir = '/home/kong/Documents/input/ocr_output/input/'
# list of files in input directory
files = [f for f in os.listdir(in_dir)
if os.path.isfile(os.path.join(in_dir, f))]
for file in files:
# input file
in_file = os.path.join(in_dir, file)
basename = os.path.splitext(file)[0]
# output file
out_file = os.path.join(out_dir, basename + '.tsv')
# run command and save its output to out with utf-8 encoding
out = sp.run(['tesseract', in_file, 'stdout', '--psm', '1',
'--oem', '1', '--dpi', '300', 'tsv'],
stdout=sp.PIPE).stdout.decode('utf-8')
# save command output to file
with open(out_file, 'w') as f:
f.write(out)