1
votes

Comment détecter et faire pivoter des images en python

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?


0 commentaires

4 Réponses :


0
votes

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.


1 commentaires

Ça a marché! Merci beaucoup. Le seul problème est qu'après la rotation, une partie de l'image est coupée.



1
votes

Pour conserver l'image intacte, vous pouvez définir le paramètre "développer" sur True

image = image.rotate(270, expand=True)


0 commentaires

1
votes

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')


0 commentaires

0
votes

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


0 commentaires