jakowenko / double-take

Unified UI and API for processing and training images for facial recognition.
https://hub.docker.com/r/jakowenko/double-take
MIT License
1.21k stars 94 forks source link

Question: Compreface RED vs GREEN? #90

Closed ozett closed 3 years ago

ozett commented 3 years ago

i had a match, and compreface-button is green, i had somehow another match, re-recognized, and compreface state correct person, but is in RED. why is this?

image

jakowenko commented 3 years ago

This is likely due to the min_area_match value being too low in the image in the right. To be considered a match the percentage and area of the bounding box both need to match the defined values.

The default value is 10000, which means any image below 100x100 won't be counted as a match. I have a lower value set on my personal setup (50x50). This is how you can override the default.

23x27 is probably too small to ever want to consider, but I did notice it was a 100% match. I can probably adjust the logic to not look at the bounding box if the match is 100%. What do you think?

objects:
  face:
    min_area_match: 2500
ozett commented 3 years ago

i will give this a try.

maybe helpful to anchor the Readme.md section with this options, to link to more information in such issues?

edit: it is not obvious, why it is green or red. And that is depens on that settings. may the gui can state cause for coloring more obvious?

another one: could be FR to have such settings per camera? because some cams shoot a face from far distance, other from near, so the value could be camera-specific different?

jakowenko commented 3 years ago

What do you think of this update on the matches page? Anytime a result is considered a "miss" then the output of why it was a miss will be below the row. You can also now hover over the green/red label to show what it means.

Screen Shot 2021-09-07 at 2 30 27 AM

ozett commented 3 years ago

detail information below the red/green matches button is great!

i think the hover dont help. because red is obviously a miss. the hover would only help, if it gives precise information about the cause for the miss. like miss of low confidence or miss of low box & low conf , but is already stated below.

maybe this details should be also written in red color? or the box information or the confidence information should be written in red? if thats the cause for misses? edit: image

jakowenko commented 3 years ago

I slightly changed the UI and decided to put the messages in a tooltip to reduce the height of those cards. I like the idea of using red to indicate what was missed, what do you think of this?

Screen Shot 2021-09-09 at 1 05 35 AM

ozett commented 3 years ago

looks good. i will try how this feels in my checking daily routine can i pull a new beta?

jakowenko commented 3 years ago

looks good. i will try how this feels in my checking daily routine can i pull a new beta?

Yes, the new beta should have it.

ozett commented 3 years ago

lots of small-area detection are matches. i know the category-detection is correct .. what to do about this?

image

jakowenko commented 3 years ago

How are you hoping to treat that image? Because you have the min_area_match set to 2500 it won't ever consider a result a match if the area is smaller than that.

ozett commented 3 years ago

i can test to set min-area that low <600 to get all small faces. will see if that causes more false-positives... thx, it try and i will report back, until than on hold...

ozett commented 3 years ago

i can zone-out some areas on that specific cam, but to prevent from false-positives i need a min_area_match per camera. the general value hits all cams, but others cams a fine with that value.

make a FR: min_area_match per camera. image

jakowenko commented 3 years ago

i can zone-out some areas on that specific cam, but to prevent from false-positives i need a min_area_match per camera. the general value hits all cams, but others cams a fine with that value.

make a FR: min_area_match per camera. image

Ah makes sense. I can try to work on making it a setting per camera over the weekend.

ozett commented 3 years ago

Great news! thx 🎁 😄

ozett commented 3 years ago

maybe you send matches & misses over MQTT ? separate topic?

i could ignore min_area_match in a second_step if i get all the log-info over mqtt. that way i could consider high-confidence a match in a second step myself

discovered the log and found this helpful . would be great to get it over mqtt...

image

jakowenko commented 3 years ago

I have the per camera setting just about done. Working on updating the README now. I changed a few other things too with how confidence and some settings are defined. You'll be able to do more at a per camera level.

Global settings will look like this.

# global detection settings (default: shown below)
detect:
  match:
    # save match images
    save: true
    # include base64 encoded string in api results and mqtt messages
    # options: true, false, box
    base64: false
    # minimum confidence needed to consider a result a match
    confidence: 60
    # hours to keep match images until they are deleted
    purge: 168
    # minimum area in pixels to consider a result a match
    min_area: 10000

  unknown:
    # save unknown images
    save: true
    # include base64 encoded string in api results and mqtt messages
    # options: true, false, box
    base64: false
    # minimum confidence needed before classifying a match name as unknown
    confidence: 40
    # hours to keep unknown images until they are deleted
    purge: 8
    # minimum area in pixels to keep an unknown result
    min_area: 0

And then the new per camera settings.

cameras:
  front-door:
    snapshot:
      # apply masks before processing image
      masks:
        # list of x,y coordinates to define the polygon of the zone
        coordinates:
          - 1920,0,1920,328,1638,305,1646,0
        # show the mask on the final saved image (helpful for debugging)
        visible: false
        # size of camera stream used in resizing masks
        size: 1920x1080

      # override global detect variables per camera
      detect:
        match:
          # save match images
          save: true
          # include base64 encoded string in api results and mqtt messages
          # options: true, false, box
          base64: false
          # minimum confidence needed to consider a result a match
          confidence: 60
          # minimum area in pixels to consider a result a match
          min_area: 10000

        unknown:
          # save unknown images
          save: true
          # include base64 encoded string in api results and mqtt messages
          # options: true, false, box
          base64: false
          # minimum confidence needed before classifying a match name as unknown
          confidence: 40
          # minimum area in pixels to keep an unknown result
          min_area: 0

I also moved the masks stuff here now because it makes more sense to keep it nested with the other camera settings.

I'll tag this issue in the commit when I push it to the beta build.

ozett commented 3 years ago

config section for cameras looks like in frigate-config. keep that similar, thats good!

I'll tag this issue in the commit when I push it to the beta build. (do i get notice somwehow about time for pulling the beta? i am not that experienced with commit handling...)

jakowenko commented 3 years ago

The actions page on the repo will show you when the build is done. I just did the last little update for the night, so should be good to pull now.

I need to test it more tomorrow, but everything I did tonight was working as intended. If you run into any weird issues let me know.

ozett commented 3 years ago

how is the new config-snytax handelt? do i have to pull the beta, start with the old-config and re-write in the new running-instance? or must the config-change for the new option done beforhand on the file?

jakowenko commented 3 years ago

You can leave your old config on there and start running the new build, it'll just use all the defaults. Then just update it from the UI to match the new format.

ozett commented 3 years ago
masks:
        # list of x,y coordinates to define the polygon of the zone

VALUES SHOULD DIRECTLY GO HERE?

        #- 3599,1896,1229,207,44,201,30,2118
        coordinates:
          #- 1920,0,1920,328,1638,305,1646,0
          - 1403,608,2485,1520,0,1520,664,592
        # show the mask on the final saved image (helpful for debugging)
        visible: true

maybe the new sub-section "coordinates" is not like in frigate. and can be ommited?

jakowenko commented 3 years ago

coordinates are required in the masks section now. This is what my test one looks like. The coordinate values are copied directly from Frigate.

cameras:
  manual:
    masks:
      coordinates:
        - 1920,0,1920,328,1638,305,1646,0
        # - 0,1080,296,1080,322,827,0,835
      visible: true
      size: 1920x1080
jakowenko commented 3 years ago

Closing since this is now included in the 1.0.0 release.

djdubd commented 2 years ago

Sorry if this unnecessarily re-opens this issue. I had a question about the per camera mask camera stream size.

cameras:
  front-door:
    snapshot:
      # apply masks before processing image
      masks:
        # list of x,y coordinates to define the polygon of the zone
        coordinates:
          - 1920,0,1920,328,1638,305,1646,0
        # show the mask on the final saved image (helpful for debugging)
        visible: false
        # size of camera stream used in resizing masks
        size: 1920x1080

The description in the comment says "size of camera stream used in resizing masks" is this the 'detect' stream or the 'record' stream in frigate? Thanks!

heisenberg2980 commented 1 year ago

@jakowenko I have updated min_area_match to 5000 in the settings but it doesn´t seem to take any effect, as double-take is still comparing the size against 10000, am I doing anything wrong or is there an issue with min_area_match?

image

This is my config:

# Double Take
# Learn more at https://github.com/jakowenko/double-take/#configuration
# enable authentication for ui and api (default: shown below)
auth: true

mqtt:
  host: 192.168.0.253
  username: !secret mqtt_user
  password: !secret mqtt_pass

objects:
  face:
    min_area_match: 5000

frigate:
  url: http://192.168.0.209:5000
  # if double take should send matches back to frigate as a sub label
  # NOTE: requires frigate 0.11.0+
  update_sub_labels: true
  attempts:
    # number of times double take will request a frigate latest.jpg for facial recognition
    latest: 0

detectors:
  compreface:
    url: http://192.168.0.209:6001
    # recognition api key
    key: !secret compreface_key