1220_izzo
Messages postés4Date d'inscriptionsamedi 17 août 2019StatutMembreDernière intervention23 février 2020
-
23 févr. 2020 à 06:15
Utilisateur anonyme -
25 févr. 2020 à 07:43
Bonjour kelk1 peut il me venir en aide, je serais très reconnaissant.je suis noyé dans le task parallèle library. En effet je suis débutant et je développe une application qui compare des images de 1 image a N images.je compare un image insérer a l'aide d'un picture box avec des autres images( via les paths) qui sont dans un dossier d'au moins 50000 images. pour accéléré l’exécution j'ai utilisé 3 taches un task.factory.new(()). a l'issu la dure d’exécution est l'ordre de 380 millisecondes c'est qui est bien rentable mais j'ai perdu la confiance de mon code qui ne reconnait pas si je compare un image qui est dans ce dossier par l'ensemble de ces images de ce dossier, ce qui n'est pas normale.
pourtant avant que je n'utilise ces tasks ça fonctionnait bien, si l'image de comparaison n’était pas dans le dossier, l'application ne reconnaissait pas et si il était dans le dossier l'application reconnaissait bel et bien.
voici mon bout de code c#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Imaging;
using PatternRecognition.GRecognition.Core;
using PatternRecognition.ROC;
using PatternRecognition.GRecognition.FeatureExtractors;
using PatternRecognition.GRecognition.Matchers;
using PatternRecognition.GRecognition.ResourceProviders;
using ImageProcessingTools;
using System.IO;
using System.Threading;
namespace PicMatcher
{
public partial class matcherForm : Form
{
public matcherForm()
{
InitializeComponent();
}
public string score;
public string qry;
public string temp;
public string MyFileName;
public int MaxFileNumber;
public string MyPath;
public int occur = 0;
public string chainedecoupe;
public int indiceDossier;
if (pictureBox1.ImageLocation == null)
{
MessageBox.Show("Charger d'abord image avant d'effectuer la comparaison");
}
else
using (forWaitDialog frm = new forWaitDialog(indexImages))
{
frm.ShowDialog(this);
}
indexImages();
}
private Bitmap Change_Resolution(string file)
{
using (Bitmap bitmap = (Bitmap)Image.FromFile(file))
{
using (Bitmap newBitmap = new Bitmap(bitmap))
{
newBitmap.SetResolution(500, 500);
return newBitmap;
}
}
}
private void match(string query, string template)
{
Change_Resolution(query);
Change_Resolution(template);
// Loading images
var iImg1 = ImageLoader.LoadImage(query);
var iImg2 = ImageLoader.LoadImage(template);
//// Building feature extractor and extracting features
var featExtractor = new PNFeatureExtractor() { MtiaExtractor = new Ratha1995MinutiaeExtractor() };
var features1 = featExtractor.ExtractFeatures(iImg1);
var features2 = featExtractor.ExtractFeatures(iImg2);
// Building matcher and matching
var matcher = new PN();
double similarity = matcher.Match(features1, features2);
score = similarity.ToString("0.000");
if (similarity >= 95)
{
MessageBox.Show(similarity.ToString() + " % similaire au file N°", "Le flibustier des images" + chainedec(), 0, MessageBoxIcon.Information);
occur += 1;
var t1 = Task.Factory.StartNew(() => taskEdit(1,16000));
var t2 = Task.Factory.StartNew(() => taskEdit(15999, 32000));
var t3 = Task.Factory.StartNew(() => taskEdit(31999, 58884));
}
public void taskEdit(int start, int stop)
{
for (int i = start; i < stop; i++)
{
MyFileName = Directory.GetFiles(MyPath).ElementAt(i);
match(qry, MyFileName);
if (occur < 1)
{
MessageBox.Show("Sujet Inconnu de la Base de données", "Flibustier des images", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}
public int nbrFile()
{
string monChemin = @"D:\Fpimage";
int FileNumber = Directory.GetFiles(monChemin).Count();
return FileNumber;
}
public string Return_Filename()
{
string[] strarray = null;
char[] splitchar = { '\\', '.', '_' };
string realname_ext;
int totarray = 0;
for (int i = 0; i < splitchar.Length; i++)
{
strarray = MyFileName.Split(splitchar[i]);
totarray = strarray.Length;