Chuyển văn bản từ word thành chữ viết tay (text to handwriting)

18 24 0
Chuyển văn bản từ word thành chữ viết tay (text to handwriting)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tổng quan về đồ án 1, Lý do chọn đề tài Do tình hình dịch Covid19 kéo dài, ảnh hưởng rất lớn tới đời sống sinh hoạt hàng ngày của chúng ta. Trong đó có việc học tập của học sinh, sinh viên. Mỗi khi đến giờ làm bài tập hay kiểm tra, việc viết bài ra giấy, chụp scan lưu sang file pdf rồi nộp bài tốn khá nhiều thời gian. Thấu hiểu độ lười biếng của sinh viên, học sinh, về việc chép phạt hoặc với yêu cầu bài tập của giáo viên với làm ra giấy chụp scan thì mọi người sẽ thích lựa chọn làm trên word hơn vì nó nhanh tiện lợi, copy, paste..Với lý do như trên nhóm em đã xuất phát và ra ý tưởng chuyển văn bản từ word (text) thành chữ viết tay (handwriting). II, Hướng giải quyết vấn đề

 BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG BÁO CÁO ĐỒ ÁN Mơn học : Chuyên đề xử lý tín hiệu truyền thông Đề tài:  Chuyển văn từ word thành chữ viết tay (Text-toHandwriting) Giảng viên: Vũ Hữu Tiến Mục lục I, Tổng quan đồ án .3 1, Lý chọn đề tài .3 II, Hướng giải vấn đề .3 1, Ý tưởng thực ban đầu: 2, Chuẩn bị liệu (data) 3 Tiền xử lý data Chương trình hàm Text-to-Handwriting 12 III Kết Đánh giá 14 1.Trình bày thử nghiệm sản phẩm .14 Mô tả số liệu đánh giá sản phẩm phân tích 16 LỜI CẢM ƠN 17 I, Tổng quan đồ án 1, Lý chọn đề tài - Do tình hình dịch Covid-19 kéo dài, ảnh hưởng lớn tới đời sống sinh hoạt hàng ngày Trong có việc học tập học sinh, sinh viên Mỗi đến làm tập hay kiểm tra, việc viết giấy, chụp scan lưu sang file pdf nộp tốn nhiều thời gian Thấu hiểu độ lười biếng sinh viên, học sinh, việc chép phạt với yêu cầu tập giáo viên với làm giấy chụp scan người thích lựa chọn làm word nhanh tiện lợi, copy, paste Với lý nhóm em xuất phát ý tưởng chuyển văn từ word (text) thành chữ viết tay (handwriting) II, Hướng giải vấn đề 1, Ý tưởng thực ban đầu: - Sử dụng ngôn ngữ Python để xây dựng code lấy mã hóa chữ viết tay, sau xây dựng tiếp code chương trình chuyển chữ text thành chữ viết tay - Chữ text text gõ bàn phím kết file ảnh pdf chữ viết tay với nội dung giống 100% text 2, Chuẩn bị liệu (data) - Sử dụng bảng chữ tiếng Việt dấu, ký tự đặc biệt bàn phím ( tổng cộng 205 ký tự) bảng chữ Tiếng anh ký tự Ảnh: Các ký tự in hoa in thường bảng chữ tiếng Anh - Viết chữ, số dấu lên trắng, ký tự lần giấy trắng sau scan lại thành file ảnh viết trực tiếp ký tự bút điện tử trang text ứng dụng thiết bị thơng minh - Tồn ảnh ký tự để cắt: Tiền xử lý data * Cắt ký tự thành ảnh riêng: sử dụng code Python để xây dựng chương trình cắt, dùng chuột để cắt ký tự viết cách bấm giữ chuột kéo từ trái sang phải để tạo phần cắt sau thả để tự động lưu vào folder tạo từ trước - Code cắt ảnh: #!/usr/bin/env python3 import cv2 import numpy as np import os cropping = False x_start, y_start, x_end, y_end = 0, 0, 0, img_counter = image = cv2.imread('/Users/tinasoft/Downloads/bang chu cai 1.png') # đường dẫn ảnh path = '/Users/tinasoft/Documents/Code_doAn/Text-to-Handwriting-master/N01n01_Đặng Văn Hưng/data' # đường dẫn folder lưu ảnh oriImage = image.copy() def mouse_crop(event, x, y, flags, param): global x_start, y_start, x_end, y_end, cropping, img_counter if event == cv2.EVENT_LBUTTONDOWN: # nút chuột trái xuống, bắt đầu ghi giá toạ độ x_start, y_start, x_end, y_end = x, y, x, y cropping = True elif event == cv2.EVENT_MOUSEMOVE: # Chuột di chuyển if cropping == True: x_end, y_end = x, y elif event == cv2.EVENT_LBUTTONUP: # nút chuột trái thả x_end, y_end = x, y # ghi lại tọa độ kết thúc (x, y) cropping = False refPoint = [(x_start, y_start), (x_end, y_end)] if len(refPoint) == 2: img_cut = oriImage[refPoint[0][1]:refPoint[1][1], refPoint[0][0]:refPoint[1][0]] # cắt ảnh copy theo toạ độ ghi cv2.imshow("Cropped", img_cut) img_name = "{}B18DCDT100BS.png".format(img_counter) # sửa thành msv người cv2.imwrite(os.path.join(path, img_name), img_cut) img_counter += def main(): cv2.namedWindow("image") cv2.setMouseCallback("image", mouse_crop) while True: i = image.copy() if not cropping: cv2.imshow("image", image) elif cropping: cv2.rectangle(i, (x_start, y_start), (x_end, y_end), (255, 0, 0), 2) cv2.imshow("image", i) key = cv2.waitKey(1) if key == ord('q'): # nhấn q để thoát print("thoát") break cv2.destroyAllWindows() if _name_ == '_main_': main() - Kết quả: * Sau sử dụng code để đưa tất ảnh cắt thành size nhằm tránh tình trạng ký tự bị lệch kết - Code đổi size ảnh: - import os from PIL import Image def Resize_hsize(hsize, path_img): # hàm đổi size ảnh theo chiều cao img = Image.open(path_img) wpercent = (hsize / float(img.size[1])) basewidth = int((float(img.size[0]) * float(wpercent))) img = img.resize((basewidth, hsize), Image.ANTIALIAS) img.save(path_img) def Resize_basewidth(basewidth, path_img): # hàm đổi size ảnh theo chiều rộng img = Image.open(path_img) wpercent = (basewidth / float(img.size[0])) hsize = int((float(img.size[1]) * float(wpercent))) img = img.resize((basewidth, hsize), Image.ANTIALIAS) img.save(path_img) def Resizefolder(path): # hàm đổi size nhiều ảnh folder os.chdir(path) for file in os.listdir(): if file.endswith(".png") or file.endswith(".jpg") or file.endswith(".jpeg"): print(os.path.join(path, file)) path_img = os.path.join(path, file) Resize_hsize(100, path_img) # tuỳ chọn hàm đổi size theo chiều cao hay chiều rộng def main(): path = "/Users/abc/Documents/Code_doAn/Text-to-Handwriting-master/N01n01_Đặng Văn Hưng/data_test" Resizefolder(path) # đổi size ảnh gọi hàm Resize_hsize Resize_basewidth if _name_ == '_main_': main() - Kết quả: * Cuối mã hóa ký tự để xây dựng code hồn chỉnh ( ví dụ E 69, e 101,….) - Code mã hóa kí tự: - # Importing Library from sys import argv import openpyxl output_excel_path = '/Users/abc/Documents/Code_doAn/Text-to-Handwriting-master/N01n01_Đặng Văn Hưng/kí tự.xlsx' def output_Excel(input_detail, output_excel_path): # Xác định số hàng cột lớn file excel cần tạo row = len(input_detail) column = len(input_detail[0]) # Tạo workbook active wb = openpyxl.Workbook() ws = wb.active # Dùng vòng lặp for để ghi nội dung từ input_detail vào file Excel for i in range(0, row): 10 for j in range(0, column): v = input_detail[i][j] ws.cell(column=j + 1, row=i + 1, value=v) # Lưu lại file Excel wb.save(output_excel_path) def Text_code(path_txt): dem = d = dict() with open(path_txt, mode="r", encoding="utf-8") as file: txt = file.read() print(txt) for i in txt: if ord(i) == 32 or ord(i) == 10: continue dem += d[ord(i)] = i print(dem) items_sorted = sorted(d.items()) for i in items_sorted: print(i) output_Excel(items_sorted, output_excel_path) def main(): path_txt = "/Users/abc/Documents/Code_doAn/Text-to-Handwriting-master/N01n01_Đặng Văn Hưng/kí tự.txt" Text_code(path_txt) if _name_ == '_main_': main() - Ví dụ số chữ mã hóa: 11 12 Chương trình hàm Text-to-Handwriting - Input: Một text nhập từ bàn phím - Nguyên tắc hoạt động code: tạo ảnh trắng có kích thước tờ A4 sau lấy văn text nhập vào Tiếp duyệt nhận diện ký tự theo bảng mã hóa xây dựng để lấy ảnh cắt lưu folder, cuối ghép vào ảnh trắng tạo Cứ lặp lại ký tự hoàn thành 100% nội dung input - Code chuyển từ chữ text sang chữ viết tay: - # Importing Library from PIL import Image from sys import argv import os from docx import Document import random def PNG_PDF(PNG_FILE): rgba = Image.open(PNG_FILE) print(rgba) rgb = Image.new('RGB', (2632, 3176), (255, 255, 255)) rgb.paste(rgba) PDF_FILE = PNG_FILE.replace(".png", ".pdf") rgb.save(PDF_FILE, 'PDF', resoultion=100.0) def Text_To_Handwriting(path_txt, path_data, chieucao, path_out): img_counter = A4_List = [] if path_txt.endswith(".txt"): with open(path_txt, "r") as file: txt = file.read() elif path_txt.endswith(".docx"): document = Document(path_txt) txt = '' for p in document.paragraphs: txt += p.text + "\n" A4_name = "A4T{}".format(img_counter) print(A4_name) A4_name = Image.new('RGB', (2632, 3176), (255, 255, 255)) A4_List.append(A4_name) sheet_width = A4_name.width Horizontal, vertical = 0, for i in txt: # print(i, ord(i)) if vertical > (3176 // chieucao - 2) * chieucao: img_counter += A4_name = "A4T{}".format(img_counter) print(A4_name) A4_name = Image.new('RGB', (2632, 3176), (255, 255, 255)) A4_List.append(A4_name) 13 Horizontal = vertical = if ord(i) == 10: Horizontal = vertical += chieucao continue try: cases = Image.open(path_data + "{}-{}.png".format(str(ord(i)), random.randint(1, 3))) A4_name.paste(cases, (Horizontal, vertical)) size = cases.width height = cases.height Horizontal += size if ord(i) == 32 and (sheet_width - Horizontal) < size * 5: Horizontal = vertical += chieucao except Exception as e: print(e, "khơng có kí tự {} {} data".format(i, ord(i))) A4_counter = for A4 in A4_List: A4.show() path_A4 = os.path.join(path_out, "A4T{}".format(A4_counter) + ".png") A4_counter += A4.save(path_A4) def main(): path_txt = "/Users/tinasoft/Documents/Code_doAn/Text-to-Handwriting-master/N01n01_Đặng Văn Hưng/testword.docx" # đường dẫn file word txt path_data = "/Users/tinasoft/Documents/Code_doAn/Text-to-Handwriting-master/N01n01_Đặng Văn Hưng/data/" # đường dẫn data path_out = "/Users/tinasoft/Documents/Code_doAn/Text-to-Handwriting-master/N01n01_Đặng Văn Hưng/A4/" # đường dẫn lưu chieucao = 100 Text_To_Handwriting(path_txt, path_data, chieucao, path_out) PNG_PDF("/Users/tinasoft/Documents/Code_doAn/Text-to-Handwriting-master/N01n01_Đặng Văn Hưng/A4/A4T1.png") if _name_ == '_main_': main() - Output: file pdf png (là tờ A4 scan) giống 100% nội dung Input 14 III Kết Quả Đánh Giá 1.Trình bày thử nghiệm sản phẩm -Kết trang word ngắn đoạn text nằm trang A4: - Kết trang word dài trang tự động cắt chuyển sang thành nhiều trang A4: 15 16 Mô tả số liệu đánh giá sản phẩm phân tích - Trong trình gán nhãn data gây sai số nhầm lẫn, Vì nên chuyển đổi liệu 98%.Qua rút ưu nhược điểm là: - Ưu Điểm: Tiện lợi + Tự động xuống dòng + Tự động tạo thêm trang - Nhược Điểm: + Các chữ bị giống giải pháp khắc phục Mỗi ký tự viết lần khác nhau, tìm đến ký tự mã hóa sử dụng random để lấy ký tự + Chưa đọc ký tự hình học, tốn học nên cần xây dựng thêm nguồn Data + Quá trình thu nhập data cịn thủ cơng 17 LỜI CẢM ƠN Lời đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến Học Viện Công nghệ Bưu Viễn thơng đưa mơn học Truyền Thơng Đa Phương Tiện vào chương trình giảng dạy nhà trường Đặc biệt, chúng em xin gửi lời cảm ơn đến thầy Vũ Hữu Tiến giảng viên môn giảng dạy truyền cho chúng em kiến thức đáng quý suốt trình học vừa qua Trong thời gian tham dự lớp học thầy, chúng em tiếp thu kiến thức quý báu học tập làm việc theo tác phong nghiêm túc Đây thực điều đáng quý suốt trình học tập sau làm nhóm Bộ mơn Truyền Thơng Đa Phương Tiện môn học thú vị, vô tốt gắn liền với nhu cầu thực tiễn sinh viên Do thời gian học tập tìm hiểu cịn có hạn, báo cáo chúng em khó tránh khỏi thiếu sót nhiều chỗ chưa chuẩn xác, kính mong thầy xem xét góp ý giúp báo cáo chúng em hoàn thiện Sinh viên nhóm 12 xin chân thành cảm ơn Thầy ạ! 18 ... để xây dựng code lấy mã hóa chữ viết tay, sau xây dựng tiếp code chương trình chuyển chữ text thành chữ viết tay - Chữ text text gõ bàn phím kết file ảnh pdf chữ viết tay với nội dung giống 100%... giấy chụp scan người thích lựa chọn làm word nhanh tiện lợi, copy, paste Với lý nhóm em xuất phát ý tưởng chuyển văn từ word (text) thành chữ viết tay (handwriting) II, Hướng giải vấn đề 1, Ý... liệu (data) - Sử dụng bảng chữ tiếng Việt dấu, ký tự đặc biệt bàn phím ( tổng cộng 205 ký tự) bảng chữ Tiếng anh ký tự Ảnh: Các ký tự in hoa in thường bảng chữ tiếng Anh - Viết chữ, số dấu lên trắng,

Ngày đăng: 05/02/2023, 23:01

Tài liệu cùng người dùng

Tài liệu liên quan