Ujwal, this one is impressive using GTK library. That's really great
one.
On May 19, 9:12 am, "Ujwal (RUBBOT)" <[EMAIL PROTECTED]> wrote:
> #include <gtk/gtk.h>
> #include <stdio.h>
> #include <malloc.h>
> #include <math.h>
> #define part 10
> #define chno 26
> static int len,count,tm[2][16];
> static GdkPixmap *pixmap = NULL;
> float statistic_data(char *src, char *des) // Real Core
> Code
> {
> int i=0,j=0,ax,ay,bx,by,sigx=0,sigy=0;
> float
> xbar,ybar,sigu,sigv=0,sigu2=0,sigv2=0,siguv=0,karl_pearson,karl_pearsony;
> float *u,*v,*u2,*v2,*uv;
> FILE *X,*Y;
> X = fopen (src,"r"); // open test
> file
> Y = fopen (des,"r"); //open template
> file
> while(!feof(X)) //until test
> file ends
> {
> fscanf(X,"%d %d ",&ax,&ay); // get x y
> sigx=sigx+ax; // calculate
> sum of all x
> fscanf(Y,"%d %d ",&bx,&by); // "
> sigy=sigy+bx; //
> "
> i++;}
>
> rewind(X); // starting
> file pointer
> rewind(Y); // "
> xbar=sigx/part; // mean
> x of test
> ybar=sigy/part; // mean
> x of template
> u = (float*)calloc (part,sizeof(float)); // create
> u=x- x(bar) table
> v = (float*)calloc (part,sizeof(float)); // "
> u2 = (float*)calloc (part,sizeof(float)); //
> u(square
> v2 = (float*)calloc (part,sizeof(float)); // v"
> uv = (float*)calloc (part,sizeof(float)); // uv
> for(i=1;i<=part;i++) // upto all
> chunks
> {
> fscanf(X,"%d %d ",&ax,&ay); // get x y of
> test
> fscanf(Y,"%d %d ",&bx,&by); // get x y of
> template
> *(u+i) = ax-xbar; // put u =
> x-x(bar)
> sigu = sigu + *(u+i); // sumof all u
> *(v+i) = bx-ybar; // "
> sigv = sigv + *(v+i); //
> "
> *(u2+i) = (*(u+i)) * (*(u+i)); // calc
> u(square)
> sigu2 = sigu2 + *(u2+i); // sum of
> u(square)
> *(v2+i) = (*(v+i)) * (*(v+i)); // "
> sigv2 = sigv2 + *(v2+i); //
> "
> *(uv+i) = (*(u+i)) * (*(v+i)); // calc u*v
> siguv = siguv + *(uv+i); //sum of u*v
> }
> karl_pearson = siguv/(sqrt(sigu2) * sqrt(sigv2)); //
> calculate
> karlpearson
> printf("\n%f is the karl pearson coefficient",karl_pearson);
> while(!feof(X)) //similar as above but this
> is for y axis
> {
> fscanf(X,"%d %d ",&ay,&ax);
> sigx=sigx+ax;
> fscanf(Y,"%d %d ",&by,&bx);
> sigy=sigy+bx;
> i++;}
>
> rewind(X);
> rewind(Y);
> xbar=sigx/part;
> ybar=sigy/part;
> u = (float*)calloc (part,sizeof(float));
> v = (float*)calloc (part,sizeof(float));
> u2 = (float*)calloc (part,sizeof(float));
> v2 = (float*)calloc (part,sizeof(float));
> uv = (float*)calloc (part,sizeof(float));
> for(i=1;i<=part;i++)
> {
> fscanf(X,"%d %d ",&ay,&ax);
> fscanf(Y,"%d %d ",&by,&bx);
> *(u+i) = ax-xbar;
> sigu = sigu + *(u+i);
> *(v+i) = bx-ybar;
> sigv = sigv + *(v+i);
> *(u2+i) = (*(u+i)) * (*(u+i));
> sigu2 = sigu2 + *(u2+i);
> *(v2+i) = (*(v+i)) * (*(v+i));
> sigv2 = sigv2 + *(v2+i);
> *(uv+i) = (*(u+i)) * (*(v+i));
> siguv = siguv + *(uv+i);
> }
> karl_pearsony = siguv/(sqrt(sigu2) * sqrt(sigv2));
> printf("\n%f is the karl pearson coefficient",karl_pearsony);
> fclose(X);
> fclose(Y);
> free(u); // free all pointer
> free(v);
> free(u2);
> free(v2);
> free(uv);
> return karl_pearson+karl_pearsony; //return totoal karlpearson}
>
> void cleararea (GtkWidget *saw, gpointer data) // this is not working
> i need to review in more detial
>
> {
> printf("\nuHUHUHU");
> GtkWidget *draw = GTK_WIDGET(data);
> gdk_draw_rectangle
> (pixmap,draw->style->white_gc,FALSE,0,0,draw->allocation.width,draw->allocation.height);
>
> gtk_widget_queue_draw_area
> (draw,0,0,draw->allocation.width,draw-
>
> >allocation.height);
>
> printf("\n%d",draw->allocation.width);
> }
> gboolean configure_pixmap (GtkWidget *widget, gpointer data)
> //
> create pixmap and adjust to drawing area
> {
> len = 0;
> count=0;
> if (pixmap)
> g_object_unref(pixmap);
> pixmap =
> gdk_pixmap_new(widget->window,widget->allocation.width,widget->allocation.height,-1);
>
> gdk_draw_rectangle
> (pixmap,widget->style->white_gc,TRUE,0,0,widget->allocation.width,widget->allocation.height);
> return TRUE;
> }
>
> gboolean draw_update(GtkWidget *widget)
> // update drawing in
> pixmap
> {
> gdk_draw_drawable
> (widget->window,widget->style->fg_gc[GTK_WIDGET_STATE
> (widget)],pixmap,0,0,0,0,widget-
> >allocation.width, widget->allocation.height);
> return TRUE;
> }
>
> gboolean getxy (GtkWidget *area, gpointer data) // show the
> recognition comparision
> {
> FILE *fp,*np; // two
> filepointer of all data and divided data
> char ch,cha[2];
> char *src = "ujwal.txt";
> char *des[26] =
> {"A.txt","B.txt","C.txt","D.txt","E.txt","F.txt","G.txt","H.txt","I.txt","J.txt","K.txt","L.txt","M.txt","N.txt","O.txt","P.txt","Q.txt","R.txt","S.txt","T.txt","U.txt","V.txt","W.txt","X.txt","Y.txt","Z.txt"};
> //
> list of files to compare
> int x,n,c=0,i=1,y;
> float cc,aa,bb,kar[chno];
> static int a;
> fp=fopen("tmp.txt","r"); // open all data
> file
> np=fopen("ujwal.txt","w+"); // open new data
> file
> GtkWidget *label = GTK_WIDGET(data); // label to
> print recognised
> character
> c=0;
> if(len == 0)
> {
> printf("error in writing and gaining data");
> }
> else
> {
> printf("\n%d is the length\n",len);
> n=len/part; //divide 10
> equal parts
> while(!feof(fp)) //until file
> ends
> {
> fscanf(fp,"%d %d ",&x,&y); //get xy from
> file tmp.txt
> if(n * i == c) //if that
> value is exact 10 parts save in
> {
> fprintf(np,"%d %d ",x,y); // ujwal.txt
> i++;
> }
> c++;
> }
> }
> fclose(fp); //close files
> fclose(np);
> kar[0]=statistic_data(src,des[0]);
> aa = kar[0];
> ch = 65;
> for (i = 1; i < chno;i++)
> {
> kar[i] = statistic_data(src,des[i]);
> if (aa < kar[i])
> {
> aa = kar[i];
> ch = 65 + i;
> }}
>
> cha[0]=ch;
> cha[1]='\0';
> gtk_label_set_text (GTK_LABEL (label),cha);
> printf(" %c is recognised\n\n\n ",ch);
> return TRUE;}
>
> void draw (GtkWidget *draw,GdkEventButton *butto)
> //function to
> draw on pixmap
> {
> FILE *tmp; //create a file pointer tmp
> int x,y; // x y interger variable
> tmp=fopen("tmp.txt","a+"); // open tmp.txt in append mode +
> GdkModifierType stat; // A GDK modifier mask
> gdk_window_get_pointer (draw->window, &x, &y, &stat); //get
> pointer x and y with mouse status
> if (stat & GDK_BUTTON1_MASK) //check if button
> pressed
> {
> //g_printf("%d and %d\t",x,y);
> len++; // inc len var
> fprintf(tmp,"%d %d ",x,y);
> gdk_draw_rectangle (pixmap,draw->style->black_gc,TRUE,x-5,y-5,10,10);
> //draw small rectangle
>
> gtk_widget_queue_draw_area (draw,x-5,y-5,10,10);
> // query to draw
> in pixmap
> }
> fclose(tmp);
> //close file tmp.txt}
>
> void killall (GtkWidget *window,gpointer data) //function to
> kill
> window and all
> {
> gtk_main_quit();}
>
> int main( int argc,char *argv[] )
> {
> GtkWidget *window; //create a pointer
> window
> GtkWidget *frame; // "
> GtkWidget *frame1; // "
> GtkWidget *button; // "
> GtkWidget *clrbut; // "
> GtkWidget *box; // "
> GtkWidget *box1; // "
> GtkWidget *hbox; // "
> GtkWidget *drawing; // "
> GtkWidget *label; // "
> FILE *tmp; // file pointer tmp
> tmp=fopen("tmp.txt","w+"); // open file tmp.txt in
> write mod if
> exists or not
> gtk_init (&argc, &argv); // program argument
> to gtk
> initiating function
> window = gtk_window_new (GTK_WINDOW_TOPLEVEL); // create a new
> window pointed by window pointer
> box = gtk_vbox_new (FALSE, 0); // "
> gtk_container_add (GTK_CONTAINER (window), box); // add box to
> window
> button = gtk_button_new_with_label ("Recognise"); // create a
> button with label recognize
> clrbut = gtk_button_new_with_label ("Clear"); // "
> box1 = gtk_vbox_new (TRUE, 0); // "
> hbox = gtk_hbox_new (TRUE,0); // "
> label = gtk_label_new ("ujwal"); // "
> drawing = gtk_drawing_area_new (); // "
> fclose(tmp); // close file
> (PURPOSE JUST CREATE A FILE)
> gtk_window_set_title (GTK_WINDOW (window), "Handwriting
> recognition"); //set title
> gtk_widget_set_size_request (window, 300, 300);
> // set size
> gtk_widget_set_size_request (drawing, 100, 100);
> // "
> frame = gtk_frame_new (NULL);
> // create new frame
> frame1 = gtk_frame_new (NULL);
> //
> gtk_box_pack_start (GTK_BOX (box), hbox, TRUE, TRUE, 0);
> // pack
> hbox in box
> gtk_box_pack_start (GTK_BOX (hbox), frame ,TRUE,TRUE, 0);
> // "
> gtk_box_pack_start (GTK_BOX (hbox), frame1 ,TRUE,TRUE, 0);
> // "
> gtk_container_add (GTK_CONTAINER (box1), button);
> // add button
> to box
> gtk_container_add (GTK_CONTAINER (box1), clrbut);
> // "
> gtk_container_add (GTK_CONTAINER (frame1),label);
> // "
> gtk_box_pack_start (GTK_BOX (box), box1, TRUE, TRUE,0);
> // "
> gtk_container_add (GTK_CONTAINER (frame), drawing);
> // "
> gtk_frame_set_label (GTK_FRAME (frame), "Main area");
> // set
> frame name
> gtk_frame_set_label (GTK_FRAME (frame1), "Recog");
> // "
> g_signal_connect (G_OBJECT(drawing),
> "expose_event",G_CALLBACK(draw_update),NULL); //connect window expose
> to draw_update function
> g_signal_connect (G_OBJECT (drawing), "configure_event",G_CALLBACK
> (configure_pixmap), NULL); //connect initial configuration to
> configure_pixmap function
> g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (getxy),
> label); // RECOGnize button clicked - start recognising
> g_signal_connect (G_OBJECT (clrbut), "clicked",G_CALLBACK
> (cleararea), drawing); // clear drawing area
> g_signal_connect (G_OBJECT (drawing), "motion_notify_event",
> G_CALLBACK (draw), NULL); // mouse in motion connect to draw function
> g_signal_connect (G_OBJECT(window),"destroy",G_CALLBACK
> (killall),NULL); // close button in window
> gtk_widget_set_events (drawing,GDK_EXPOSURE_MASK
> | GDK_LEAVE_NOTIFY_MASK
> | GDK_BUTTON_PRESS_MASK
> | GDK_POINTER_MOTION_MASK
> | GDK_POINTER_MOTION_HINT_MASK);
> // mask for the
> drawing area
> gtk_widget_show (label); // show label
> gtk_widget_show (frame); // "
> gtk_widget_show (frame1); // "
> gtk_widget_show (button); // "
> gtk_widget_show (clrbut); // "
> gtk_widget_show (box); // "
> gtk_widget_show (hbox); // "
> gtk_widget_show (drawing); // "
> gtk_widget_show (box1); // "
> gtk_widget_show (window); // "
> gtk_main (); // run gtk all events
> and guis
> return 0; // function end
> return value
>
> }
>
> use gcc -o <exec_name>
> ...
>
> read more ยป
--~--~---------~--~----~------------~-------~--~----~
FOSS Nepal mailing list
[email protected]
http://groups.google.com/group/foss-nepal
Community website: http://www.fossnepal.org/
-~----------~----~----~----~------~----~------~--~---