J'ai plusieurs factures PDF que j'essaie d'analyser. Je les convertis en images et j'utilise ocr pour obtenir du texte à partir des images. Un des pdf a 2 pages sur 3 qui sont tournées de 90 degrés. Comment puis-je détecter ces pages pivotées et les faire pivoter correctement pour que l'OCR renvoie des informations correctes?
4 Réponses :
Quand vous dites qu'ils sont tournés, serait-ce aussi simple qu'ils sont tous censés être en orientation portrait et que certaines pages sont en orientation paysage? Vous devriez soit être en mesure de lire les métadonnées à partir du PDF de l'orientation des pages, soit si ce n'est pas disponible pour une raison quelconque, vous devrez peut-être utiliser cette logique simple pour le déterminer, comme rotated = image.width> image .height
Avec Pillow / PIL, il serait facile de faire pivoter l'image avant l'OCR:
if rotated: image = image.rotate(270)
Il pourrait vraisemblablement y avoir des pages à l'envers et à moins que vous ne disposiez de métadonnées fiables du PDF, vous devrez peut-être d'abord effectuer l'OCR avec la direction la plus probable (par exemple 90 degrés dans le sens inverse des aiguilles d'une montre, comme ci-dessus) et si cela ne renvoie aucun texte, essayez à nouveau après une rotation de 180 degrés.
Ça a marché! Merci beaucoup. Le seul problème est qu'après la rotation, une partie de l'image est coupée.
Pour conserver l'image intacte, vous pouvez définir le paramètre "développer" sur True
image = image.rotate(270, expand=True)
Voici une solution qui fonctionne pour une image mais vous pouvez le faire pour une liste d'images et vérifier chaque image avant de la réenregistrer au format PDF:
#import library enter code here from PIL import Image #open image file f=Image.open('test.jpg') #conver to pdf pdf=f.convert('RGB') #if width > than height, rotate it to get portrait if pdf.width > pdf.height: pdf=pdf.rotate(270,expand=True) #save pdf pdf.save('test.pdf')
Vous pouvez utiliser imutils pour faire pivoter sans couper les limites de l'image après la rotation.
import cv2 as cv import imutils img = cv.imread('your_image.png') imutils.rotate_bound(img, 270) #### 270 for anti-clockwise or 90 for clockwise