omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Coords/edge detect 2 colour image

    Pythonista
    4
    15
    3069
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • mikael
      mikael @rb last edited by

      @rb, if we are talking something like a photo with rectangles, you could also use the iOS Vision framework, see here.

      I have a Python implementation lying around somewhere, let me know if that seems interesting.

      1 Reply Last reply Reply Quote 0
      • mikael
        mikael @cvp last edited by

        @cvp, thanks! Have been hacking more on the laptop lately.

        1 Reply Last reply Reply Quote 0
        • rb
          rb last edited by rb

          Hiya
          So I don’t have an image it’s just in my head but initially yes I’m thinking rectangles black on white or white on black.They could be arbitrary sizes I’m thinking - I just want use them to create edges that I can repurpose as coordinates for building other elements with.

          1 Reply Last reply Reply Quote 0
          • rb
            rb last edited by

            Vision iOS framework looks perfect actually so yes please would be interested in how to implement such a thing in Pythonista for sure.

            1 Reply Last reply Reply Quote 0
            • rb
              rb last edited by rb

              I found another post regarding text recognition and iOS vision and recognise rectangle is mentioned there so cut out the text aspect and adapted it: (thanks jonb)

              But I can’t get what I need from this - I have tried altering the VNDetectRectanglesRequest properties.
              Basic issue is even though it’s a very simple image = seems to struggle identifying accurately the edges.

              from objc_util import *
              import ui
              
              
              ui_image=ui.Image.named('test:Gray21')
              ui_image.show()
              
              load_framework('Vision')
              VNDetectRectanglesRequest = ObjCClass('VNDetectRectanglesRequest')
              VNImageRequestHandler = ObjCClass('VNImageRequestHandler')
              
              handler = VNImageRequestHandler.alloc().initWithData_options_(ui_image.to_png(), None).autorelease()
              
              req = VNDetectRectanglesRequest.alloc().init().autorelease()
              
              req.maximumObservations=0
              req.minimumSize=0.01
              req.minimumAspectRatio=0.0
              req.maximumAspectRatio=1.0
              req.quadratureTolerance=10
              
              success = handler.performRequests_error_([req], None)
              with ui.ImageContext(*tuple(ui_image.size) ) as ctx:
                 ui_image.draw()
                 for result in req.results():
                    cgpts=[result.bottomLeft(),
                                                      result.topLeft(),
                                                      result.topRight(),
                                                      result.bottomRight(),
                                                      result.bottomLeft()] 
                    verts = [(p.x*ui_image.size.w, (1-p.y)*ui_image.size.h) for p in cgpts]
                    pth = ui.Path()
                    pth.move_to(*verts[0]) 
                    for p in verts[1:]:
                       pth.line_to(*p)  
                    ui.set_color('red')
                    pth.stroke()
                    x,y = verts[0]
                    w,h =(verts[2][0]-x), (verts[2][1]-y)
                   
                 marked_img = ctx.get_image()
                 marked_img.show()
              
              cvp 1 Reply Last reply Reply Quote 0
              • cvp
                cvp @rb last edited by cvp

                @rb not so bad with

                1 Reply Last reply Reply Quote 0
                • rb
                  rb last edited by

                  Hmm ok so your saying 2 colour works better - I only used that test image as I couldn’t work out how to upload an image here…
                  this is more like the kind of images I want to use though, ie long thin horizontal rectangles mostly - seems to struggle, try :

                  iow:drag_256

                  It creates extra rectangles at top and bottom bounds- how can I remove these?

                  cvp 2 Replies Last reply Reply Quote 0
                  • cvp
                    cvp @rb last edited by cvp

                    @rb try with this, it works

                    with ui.ImageContext(400,300) as ctx:
                    	pth = ui.Path.rect(0,0,400,300)
                    	ui.set_color('black')
                    	pth.fill()
                    	pthr = ui.Path.rect(100,100,200,50)
                    	ui.set_color('white')
                    	pthr.fill()
                    	ui_image = ctx.get_image() 
                    
                    
                    #ui_image=ui.Image.named('iow:drag_256')
                    

                    1 Reply Last reply Reply Quote 0
                    • cvp
                      cvp @rb last edited by cvp

                      @rb said:

                      I couldn’t work out how to upload an image here…

                      I use

                      import pyimgur,photos,clipboard,os,console
                      i=photos.pick_image()
                      if i:
                      	print(i.format)
                      	format = 'gif' if (i.format == 'GIF') else 'jpg'
                      	i.save('img.'+format)
                      	clipboard.set(pyimgur.Imgur("303d632d723a549").upload_image('img.'+format, title="Uploaded-Image").link)
                      	console.hud_alert("link copied!")
                      	os.remove('img.'+format)
                      

                      With pyImgur from here

                      1 Reply Last reply Reply Quote 0
                      • JonB
                        JonB last edited by

                        Fwiw
                        https://forum.omz-software.com/topic/6016/recognize-text-from-picture/43?page=3

                        Had a rectangle recognizer.

                        You might play with the quadratureTolerance -- you are only allowing rectangles with angles within 10 degrees -- you might increase that to the default of 30 to allow perspective.

                        Try adjusting minimumConfidence -- lower will allow more detections, at lower quality.

                        1 Reply Last reply Reply Quote 0
                        • rb
                          rb last edited by

                          Cheers everyone, Jon that’s where I nabbed that snippet from in first place! The issue is the proximity to the edge of the image I think, mine were very close to the edge so I tried a bigger black border and I did try messing with the numbers a bit on properties.Seems to work better but still not perfect.

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post
                          Powered by NodeBB Forums | Contributors