-
Notifications
You must be signed in to change notification settings - Fork 0
/
Payslip.py
118 lines (106 loc) · 4.56 KB
/
Payslip.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
from pdf2image import convert_from_path, convert_from_bytes
import pytesseract
import os
import numpy as np
from cv2 import cv2
from skimage import io
def get_grayscale(image):
return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
list_traite_compte = []
list_traite_salaire = []
path_dir=os.getcwd()
#ATTENTION ! chemins à modifier/créer suivant l'arborescence.
#Dossier des bulletins de salaire
path_salaire=path_dir+'/dossier_salaire2/'
bulletins=os.listdir(path_salaire)
#Dossier des relevés de compte
path_compte=path_dir+'/dossier_compte2/'
releves=os.listdir(path_compte)
#On ordonne les listes
releves.sort()
bulletins.sort()
#DÉTERMINE SI LE TIERS À FRAUDER EN FONCTION DE SON BULLETIN DE SALAIRE ET DE SON RELEVÉ DE COMPTE:
def payslip(compte, salaire):
compte=compte.replace('.pdf','')
salaire=salaire.replace('.pdf','')
#Ouverture du pdf pour extraire le texte du Relevé Compte
print("\tLecture de "+compte+"...")
with open(path_compte+compte+".pdf",'rb') as pdf:
filename =compte
images = convert_from_bytes(pdf.read(),500,use_pdftocairo=True, strict=False)
tmp = 0
for image in images:
if not os.path.exists('out/'+filename+'/'):
os.makedirs('out/'+filename+'/')
image.save('out/'+filename+'/'+str(filename)+str(tmp)+'.png', 'PNG')
src = io.imread("out/"+filename+"/"+str(filename)+str(tmp)+".png")
#Question 3
image_gray = get_grayscale(src)
#Question 4
custom_config = r'--oem 3 --psm 6'
result_txt = pytesseract.image_to_string(image_gray, config=custom_config)
list_traite_compte.append(result_txt)
pdf.close()
tmp+=1
#Récupérer le salaire net du Bulletin de Salaire
words = str(list_traite_compte[len(list_traite_compte)-1])
lines = words.split("\n")
"""
for line in lines:
if "SALAIRE" in line:
print ("\t\tSALAIRE BULLETIN : " +line)
"""
#Ouverture du pdf pour extraire le texte du Bulletin de Salaire
print("\tLecture de "+salaire+"...")
with open(path_salaire+salaire+".pdf",'rb') as pdf:
filename =salaire
#Question
images = convert_from_path(path_salaire+salaire+".pdf",500,use_pdftocairo=True, strict=False)
tmp = 0
for image in images:
if not os.path.exists('out/'+filename+'/'):
os.makedirs('out/'+filename+'/')
image.save('out/'+filename+'/'+str(filename)+str(tmp)+'.png', 'PNG')
src = io.imread("out/"+filename+"/"+str(filename)+str(tmp)+".png")
#Question 3
image_gray = get_grayscale(src)
#Question 4
custom_config = r'--oem 3 --psm 6'
result_txt = pytesseract.image_to_string(image_gray, config=custom_config)
list_traite_salaire.append(result_txt)
with open("out/output.txt",'w') as output:
output.write(str(result_txt))
pdf.close()
tmp+=1
output.close()
#Récupérer le salaire net de la fiche de paie
words = str(list_traite_salaire[len(list_traite_salaire)-1])
lines = words.split("\n")
"""
for line in lines:
print(line)
if "NET PAYÉ" in line:
print ("TROUVE ! " +line)
"""
salaire_net = words[len(words)-14:len(words)-6]
bag=['\'', '\"', '<', '>', '«', '-', '_','(',')','~','&','*','/',';']
for char in bag:
salaire_net=salaire_net.replace(char,'')
print("\t\tSALAIRE NET: "+salaire_net)
#RECHERCHE DU SALAIRE NET DANS LE RELEVÉ DE COMPTE BANQUAIRE:
fraude = True
for page in list_traite_compte:
if salaire_net in page:
print("\tCORRESPONDANCE : Il y a bien un virement qui correspond au montant affiché sur le buletin de salaire.")
fraude = False
return 1
elif salaire_net.replace('.',',') in page:
print("\tCORRESPONDANCE : Il y a bien un virement qui correspond au montant affiché sur le buletin de salaire.")
fraude = False
return 1
if fraude == True:
print("\tSUSPICION DE FRAUDE : pas de virement qui correspond au montant inscrit sur la fiche de paie.")
return 0
for i in range(len(releves)):
print("Vérification n° "+ str(i+1) )
payslip(releves[i],bulletins[i])