Problèmes résolus vba, python, access

Le site flore bigorre est réalisé à partir d'une base de données Access, par l'utilisation de programmes en VBA ou python.
On trouvera ici les solutions utilisées pour résoudre quelques problèmes rencontrés.
Réaliser un OCR spécifique à l'aide de GAMERA
(Cliquer pour voir détails)
Cet OCR traite des images fortement dégradées, le texte imprimé d'origine utilise des polices anciennes, des caractères spéciaux inconnus des OCR courants, tels que "la flore des hautes Pyrénées de l'abbé Dulac".
La Segmentation et Discrimination des images et du texte fait appel à une procédure spécifique
La restitution a nécessité la création d'une police spéciale
Plusieurs modifications ont été apportées à GAMERA et sont décrites
flore dulac
restitution
              ocr
original
résultat partiel; voir résultat complet: flore Dulac html


Comment éliminer les zones grisâtres d'un scan.
(Cliquer pour voir détails)
Un programme de quelques lignes en Python permet de supprimer les zones grises du scan, au bord des pages, notamment si le scan concerne une page double.

un scan à
              zones grisâtres masque de bruit
scan corrigé
Voici l'original voici le masque de bruit
et voici l'image corrigée
VBA access
Dans vba access la fenêtre d'un formulaire n'est pas trouvée par EnumWindows
Dans un état access, pour accéder aux propriétés de l'image en vba , mon_image.nom_de_propriété ne fonctionne pas (access 2000)
Dans l'éditeur de code VBA access (2000), on ne peut pas saisir un caractère UTF-8 (exemple double flêche). L'éditeur affiche un point d'interrogation.
La fonction Sendkey de VBA a un fonctionnement aléatoire.
Lors de la liaison (via AODB.connection) à une requête, pour éviter l'erreur "SELECT attendu...",
voici le code que l'on peut utiliser
'**************la requête à laquelle on veut se connecter a pour nom dans sa base de données "nom_de_la_requête_à_connecter"****************
Set base_lointaine = New ADODB.Connection
Dim la_requête As ADODB.Recordset
stringconnection = "Provider=Microsoft.Jet.OLEDB.4.0;data source=le_chemin_de_la_base_à_relier;"
base_lointaine.Open stringconnection
Set requête_locale = New ADODB.Recordset
requête_locale.Open "select nom_de_la_requête_à_connecter.* from nom_de_la_requête_à_connecter", base_lointaine
'l'emploi de <requête_locale.Open "nom_de_la_requête_à_connecter.* from nom_de_la_requête_à_connecter", base_lointaine> provoque une erreur
La fonction WAIT telle qu'on la trouve habituellement utilisant Timer() ne fonctionne pas à minuit , pour éviter le BUG de minuit...
voici le code que l'on peut utiliser
Sub Wait(seconds As Integer)
' Timer repasse à zéro à minuit; ce qui provoque une boucle infinie
Dim origine
origine = now()
Do
DoEvents
Loop While DateDiff("s", origine, now()) < seconds
End Sub
VBA access + corelpaint
Pour enregistrer les fichiers au format jpg, les macros de corelpaint spécifiant les paramètres de compression ne fonctionnent pas.
Declare Sub FlushPrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal Section&, ByVal Key&, ByVal Value&, ByVal File$)
Declare Sub WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal Section$, ByVal Key$, ByVal Value$, ByVal File$)
Sub mon_filterjpg(Quality, smoothing, SubFormat, Progressive, Optimized)
Dim inifile
inifile = <votre répertoire installation>+"CorelDRAW8\PhotoPnt8\_default\photopnt.ini"
FlushPrivateProfileString 0, 0, 0, inifile
WritePrivateProfileString "JPEG Filter", "Quality", Quality, inifile
WritePrivateProfileString "JPEG Filter", "Smoothing", smoothing, inifile
WritePrivateProfileString "JPEG Filter", "SubFormat", SubFormat, inifile
WritePrivateProfileString "JPEG Filter", "Progressive", Progressive, inifile
WritePrivateProfileString "JPEG Filter", "Optimized", Optimized, inifile
End Sub
Sub teste_enregistre_paint()
'******inclure la bibliothèque PHOTOPNT.TLB dans les références de VBA access*****
Dim toto
Set toto = CreateObject("corelphotopaint.automation.8")
With toto
.FileOpen "c:/users/desktop/essai.jpg", 0, 0, 0, 0, 0, 1, 1
toto.ImageResample 400, toto.GetDocumentHeight * 400 / 1024, 75, 75, True
mon_filterjpg 0, 0, 0, 1, 0
.FileSave "c:\users\desktop\result.jpg", 774, 3
End With
End Sub
VBA access + coreldraw
Dans coreldraw le menu "ajuster le texte à l'encadré" n'a pas d'équivalent dans les fonctions de draw_script.
Sub simule_fonction()
''******inclure la bibliothèque CORELDRAW.TLB dans les références de VBA access*****
hdl_corel = 0 '***********cette variable est déclarée au niveau du module pour être partagée par les procédures**********
Do
DoEvents
EnumWindows AddressOf EnumCorel, ByVal 0& '*********EnumCorel contient le nom du document Corel en cours********
'******************EnumWindows renvoi le handle de la fenêtre de classe = "CorelDRAW 8.0" contenant le nom du document*********
Loop While hdl_corel = 0
SetForegroundWindow hdl_corel
'************pour la fonction SendKeys$, voir information quelques lignes plus haut dans cette page**************
SendKeys$ "%x", 500 '********envoi de ALT+x au menu Text du document en cours********
SendKeys$ "j", 500 '********j comme ajuster du sous menu...********
End Sub
Controler le rendu par le navigateur de 500 pages et stocker le résultat grace aux cookies.
(Cliquer pour voir détails)
L'observation du rendu (par exemple pour la flore Dulac) peut être fastidieuse (plusieurs centaines de pages à observer et une centaine de divisions par page).
Un programme javascript permet d'automatiser ce contrôle et d'en stocker le résultat dans des cookies pour une utilisation ultérieure.
Centrer verticalement un élément <li> dans un élément <ul>

résultat de centrage vertical
un compteur pour votre site