Dedicated License Plate Cam project

dalepa

Moderator
Mar 9, 2014
841
245
Houston, Texas
Thanks to nextdoor.com, I now hear about break-in's almost weekly in our neighborhood of about 1500 homes...

I have 2 Hikvision 2032's over the driveway and a 2432 on the porch, but they are 4mm and not really enough to catch any plate numbers...

I was thinking about putting up another 2032 at 12mm, but before I go do that, I thought I would ask if there is a better way to detect and track license plates?

Also any software recommendations for this project other than BI that can automagically detect and store plate numbers?



Here's my Hikvision 2032 @ 4mm view...

9692320329_fddeb0e3bc_b.jpg
 
First you need to get a camera at an angle that's about 30-40 degrees to the plate. If it's too sharp an angle, it won't read the plate, too narrow an angle and multiple cars can block each other. Then you need to get a view of the plate that's not much wider than width of the car, maybe 8-10' wide. Then you need to forget megapixel as it just takes too long to analyze a 3MP image for plates at a reasonable frame rate. We use a megapixel camera, but at VGA resolution at 4-5fps, any more an LPR software has trouble keeping up. The image you get for the plate must be very clear or it won't be able to do the optical character definition.


Now onto cameras. You can use a 12mm lens, but I'm not sure you will get the results you want because the field of view is too wide, but if you can set it within say 15' from the plate it may work. Most people use either purpose built cameras with telephoto varifocal lenses or they use a box camera with varifocal lens capable of say 5-50mm. For me, to get plates at say 60-70' we are using the full 50mm capability, so figure it that way, if you are 30-35' away, you may need 25mm and 15-17' away you can use 12mm.

Then setting up the camera is tricky. You want sharpness way down, WDR off, shutter max at about 1/120/sec, but you have to experiment at which point at night the plate is visible, not too bright that it's washed out, not too dark where it's not legible.

Lighting is another issue, you may need additional IR lighting to overcome head/taillights and still get a bright clear license plate.


Software for this is not cheap. The lowest end was iSpy that claims to do it, have not tried it but that may be the least expensive at $50/server. Geovision charges about $800/cam on top of their NVR fee and that's least expensive commercial solution I've found, Milestone charges about $1,300/cam on top of it's NVR fee with Express edition as the minimum, some charge way more, maybe $3-4K/cam. OpenALPR is cool but you have to know C++ to leverage it with your camera.
 
OpenALPR looks like it will do the job... The OpenAPPR LiveDemo processes images in under 150ms, so I don't see a problem processing the occasional passing car

Shouldn't be hard to come up with a way to have OpenALPR post process images from BI alerts

I may have to dust off my C++ brain cells that have been dormant for 15 years, but it looks like the command line version may be good enough to get started...

I see a perfect cloud app opportunity for this application... Process Plate images in the cloud...


Just need a good image... I just ordered a 12mm 2032, hopefully I'll get a cam that's focused for 30' away, or some help re-focusing it.

plate1.png
 
Cool if you share the code with us. I actually wrote a Windows script that extracted an image from the camera, passed it to the program, but it wasn't fast enough, a little over a frame per second because the startup times to load the libraries. If you do that in C, it would work well.
 
I was able to get OpenALPR working on a ubuntu vm pretty quick...


Ran 27 frames in about 12 seconds. I need to change the angle, and/or ALPR setting for better results, but not a bad start for this project... lots of config options that result is better results...








root@ubuntu:/mnt/LPR# alpr -t tx -n 1 --config ~/alpr.conf DriveAlrt.20140616_123315_1.avi
Frame: 0
plate0: 1 results -- Processing Time = 24.1157ms.
- 91MT5 confidence: 89.9091 template_match: 0
Frame: 1
plate0: 1 results -- Processing Time = 25.4685ms.
- 91OOT5 confidence: 86.3443 template_match: 0
Frame: 2
plate0: 1 results -- Processing Time = 24.6342ms.
- 91WMT5 confidence: 87.4402 template_match: 0
Frame: 3
Frame: 4
plate0: 1 results -- Processing Time = 26.4979ms.
- 9DIT5 confidence: 84.999 template_match: 0
Frame: 5
Frame: 6
plate0: 1 results -- Processing Time = 22.8961ms.
- 91WHT5 confidence: 86.2492 template_match: 0
Frame: 7
plate0: 1 results -- Processing Time = 26.8106ms.
- 91WHT5 confidence: 85.4349 template_match: 0
Frame: 8
plate0: 1 results -- Processing Time = 27.3664ms.
- 91W1DT confidence: 83.3962 template_match: 0
Frame: 9
Frame: 10
Frame: 11
Frame: 12
Frame: 13
plate0: 1 results -- Processing Time = 35.138ms.
- 91WHT5 confidence: 88.0294 template_match: 0
Frame: 14
plate0: 1 results -- Processing Time = 48.4011ms.
- 91WMT5 confidence: 89.5508 template_match: 0
Frame: 15
plate0: 1 results -- Processing Time = 27.9567ms.
- 91WMT5 confidence: 89.728 template_match: 0
Frame: 16
plate0: 1 results -- Processing Time = 38.5695ms.
- 91WHT5 confidence: 90.3811 template_match: 0
Frame: 17
plate0: 1 results -- Processing Time = 30.0526ms.
- 91WMT5 confidence: 89.8052 template_match: 0
Frame: 18
Frame: 19
plate0: 1 results -- Processing Time = 27.1801ms.
- 91WMT5 confidence: 89.0391 template_match: 0
Frame: 20
Frame: 21
plate0: 1 results -- Processing Time = 27.3614ms.
- 91WMT5 confidence: 89.6188 template_match: 0
Frame: 22
Frame: 23
Frame: 24
Frame: 25
Frame: 26
Frame: 27





# detection_iteration_increase = 1.01 (56 seconds)

root@ubuntu:/mnt/LPR# time alpr -t tx -n 1 --config ~/alpr.conf DriveAlrt.20140616_123315_1.avi
Frame: 0
plate0: 1 results -- Processing Time = 25.0274ms.
- 91WMT5 confidence: 87.2701 template_match: 0
Frame: 1
plate0: 1 results -- Processing Time = 24.5482ms.
- 91MT5 confidence: 88.4251 template_match: 0
Frame: 2
plate0: 1 results -- Processing Time = 47.5931ms.
- 91WMT5 confidence: 87.6368 template_match: 0
Frame: 3
Frame: 4
Frame: 5
plate0: 1 results -- Processing Time = 29.2019ms.
- 91WMT5 confidence: 89.5704 template_match: 0
Frame: 6
plate0: 1 results -- Processing Time = 43.3638ms.
- 9W1T5 confidence: 85.7033 template_match: 0
Frame: 7
plate0: 1 results -- Processing Time = 37.2239ms.
- 91WMT5 confidence: 87.1349 template_match: 0
Frame: 8
plate0: 1 results -- Processing Time = 42.28ms.
- 91WGT5 confidence: 86.2989 template_match: 0
Frame: 9
plate0: 1 results -- Processing Time = 26.8288ms.
- 91WMT5 confidence: 89.4585 template_match: 0
Frame: 10
plate0: 1 results -- Processing Time = 24.8935ms.
- 1ID0T confidence: 84.6058 template_match: 0
Frame: 11
Frame: 12
plate0: 1 results -- Processing Time = 30.0824ms.
- 91WMT5 confidence: 89.5482 template_match: 0
Frame: 13
plate0: 1 results -- Processing Time = 25.7198ms.
- 91DQ0T confidence: 86.1412 template_match: 0
Frame: 14
plate0: 1 results -- Processing Time = 28.406ms.
- 91WHT5 confidence: 88.165 template_match: 0
Frame: 15
plate0: 1 results -- Processing Time = 36.228ms.
- 91WMT5 confidence: 89.535 template_match: 0
Frame: 16
plate0: 1 results -- Processing Time = 27.4538ms.
- 91WMT5 confidence: 88.7887 template_match: 0
Frame: 17
plate0: 1 results -- Processing Time = 31.8606ms.
- 91WMT5 confidence: 89.2907 template_match: 0
Frame: 18
plate0: 1 results -- Processing Time = 30.7871ms.
- 91WMT5 confidence: 90.9161 template_match: 0
Frame: 19
plate0: 1 results -- Processing Time = 29.9884ms.
- 91WMT5 confidence: 89.8373 template_match: 0
Frame: 20
plate0: 1 results -- Processing Time = 31.121ms.
- 91WMT5 confidence: 90.0029 template_match: 0
Frame: 21
plate0: 1 results -- Processing Time = 28.8442ms.
- 91WMT5 confidence: 90.0932 template_match: 0
plate1: 1 results -- Processing Time = 37.9458ms.
- DOD0OQ confidence: 82.1768 template_match: 0
Frame: 22
plate0: 1 results -- Processing Time = 27.4575ms.
- 91WHT5 confidence: 87.8812 template_match: 0
Frame: 23
Frame: 24
Frame: 25
Frame: 26
Frame: 27
real 0m56.571s
user 0m56.003s
sys 0m0.479s
 
A little better than Windows, but 2fps is not good enough, you need 4-5fps to capture a slower moving car, maybe up to 30mph. If you write the code inside their code so you don't have to load the libraries each time, it will be a lot faster, you can probably get 10 fps.

Should be easy if you know C++, just send a request to the camera for a snapshot and have it write it to disk. Writing the snapshot to disk was actually quick. then read the image from disk, pass it to openalpr to return the plate number. Then store it in a database along with the snapshot that matched. keep track that you don't send the same plate multiple times in case the car parks in front of the camera for an hour. Then compare it against a plate list to see if there's an action to take, then send the event back to the camera in the way of an URL it can't act on, that way the camera's code handles the event, like send an email, or trigger alarm out.

This was my code I was testing with using Windows scripting and an Axis camera with OpenALPR

Option Explicit
' On Error Resume Next
Dim URL
Dim fso
Dim StdFile
Dim i
Dim File
Dim xmlHTTP
Dim ADOStream
Dim Date1
Dim WshShell
Dim strOut
Dim objExec
Dim results
Date1 = Day(Date)&"-"&Month(Date)&"-"&Year(Date)&"-"&hour(now)&"h"&minute(now)&"m"&second(now)
URL = "http://root:password@myipaddress:1521/axis-cgi/jpg/image.cgi"
File = "c:\openalpr\test.jpg"
Set WshShell = WScript.CreateObject("WScript.Shell")
Set xmlHTTP = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
MsgBox "There was a problem creating the objects. Error code: " & Err.Number
End If
Call xmlHTTP.open ("GET", URL, False)
xmlHTTP.send()
If Err.Number <> 0 Then
MsgBox "There was a problem sending the HTTP request. Error code: " & Err.Number
End If
' WScript.Sleep 500
For i = 1 to 100
If xmlHTTP.status = 200 Then
' Wscript.echo xmlHTTP.getResponseHeader("Content-Length")
Set ADOStream = CreateObject("ADODB.Stream")
With ADOStream
.Type = 1
.Open()
.Write(xmlHTTP.responseBody)
.SaveToFile File, 2
.Close()
End With
' MsgBox "Image saved."
results = WshShell.Run("cmd /c C:\openalpr\alpr -t ca -r C:\openalpr\runtime_data C:\openalpr\test.jpg > C:\openalpr\platematch.txt", 0, true)
Set fso = CreateObject("Scripting.FileSystemObject")
Set StdFile = fso.OpenTextFile("C:\openalpr\platematch.txt", 1)

If not StdFile.AtEndOfStream Then
StdFile.ReadLine
msgbox StdFile.ReadLine
Wscript.Quit
End If

Set ADOStream = Nothing
Else
MsgBox "Camera server returned " & xmlHTTP.status & ". Unable to connect."
End If
Set fso = Nothing
Set StdFile = Nothing
Next
 
The clip that was captured was at 20 FPS for about 1 second, and the default ALPR config only took 6 seconds to processes all 27 frames and produced the following output. Im not sure why the processing time is about 25m per frame, but skipping to the next frame is taking so long, it should only be about a second to process these 27 frames...


I can change some of the config file options to get better results, but even setting confidence to 90 is yielding several incorrect plates #'s...




fun fun...





root@ubuntu:/mnt/LPR# time alpr -t tx -n 10 DriveAlrt.20140616_123315_1.avi
Frame: 0
Frame: 1
Frame: 2
Frame: 3
plate0: 8 results -- Processing Time = 24.1902ms.
- 1D0T confidence: 75.1614 template_match: 0
- 1DOT confidence: 72.2758 template_match: 0
- 1DDT confidence: 72.005 template_match: 0
- 1DQT confidence: 71.9235 template_match: 0
- 1DBT confidence: 71.4671 template_match: 0
- 1O0T confidence: 71.3483 template_match: 0
- 1DUT confidence: 71.197 template_match: 0
- 1D9T confidence: 71.082 template_match: 0
Frame: 4
plate0: 4 results -- Processing Time = 22.6382ms.
- 1B1T confidence: 73.4476 template_match: 0
- 1D1T confidence: 69.3741 template_match: 0
- 1O1T confidence: 69.2673 template_match: 0
- 1Q1T confidence: 68.9968 template_match: 0
Frame: 5
plate0: 7 results -- Processing Time = 24.9829ms.
- 1J0T confidence: 75.6407 template_match: 0
- 110T confidence: 75.2355 template_match: 0
- 11J0T confidence: 73.6808 template_match: 0
- 1JOT confidence: 72.9631 template_match: 0
- 1JDT confidence: 72.7185 template_match: 0
- 11OT confidence: 72.5578 template_match: 0
- 11DT confidence: 72.3132 template_match: 0
Frame: 6
plate0: 10 results -- Processing Time = 24.6472ms.
- 91WHT5 confidence: 86.2648 template_match: 0
- 91HT5 confidence: 85.5955 template_match: 0
- 91WMT5 confidence: 84.9759 template_match: 0
- 91MT5 confidence: 84.3066 template_match: 0
- 91WT5 confidence: 79.7006 template_match: 0
- 91WNT5 confidence: 79.5754 template_match: 0
- 91T5 confidence: 79.0313 template_match: 0
- 91NT5 confidence: 78.9061 template_match: 0
- 91WBT5 confidence: 76.3866 template_match: 0
- 91BT5 confidence: 75.7172 template_match: 0
Frame: 7
plate0: 2 results -- Processing Time = 23.67ms.
- 1BI0 confidence: 67.7946 template_match: 0
- 1B10 confidence: 64.6197 template_match: 0
Frame: 8
Frame: 9
plate0: 10 results -- Processing Time = 25.161ms.
- 91WMT5 confidence: 88.4914 template_match: 0
- 91WHT5 confidence: 85.9308 template_match: 0
- 91HMT5 confidence: 84.7702 template_match: 0
- 91HHT5 confidence: 82.2096 template_match: 0
- 91NMT5 confidence: 81.7524 template_match: 0
- 91RMT5 confidence: 79.4608 template_match: 0
- 91NHT5 confidence: 79.1919 template_match: 0
- 91MMT5 confidence: 79.0503 template_match: 0
- 91RHT5 confidence: 76.9003 template_match: 0
- 91MHT5 confidence: 76.4897 template_match: 0
Frame: 10
plate0: 10 results -- Processing Time = 22.6272ms.
- 1IQ0T confidence: 79.173 template_match: 0
- 1ID0T confidence: 79.0726 template_match: 0
- 1SIQ0T confidence: 78.4088 template_match: 0
- 1SID0T confidence: 78.3085 template_match: 0
- 1IO0T confidence: 75.6881 template_match: 0
- 1SIO0T confidence: 74.924 template_match: 0
- 1I00T confidence: 74.8957 template_match: 0
- 1SI00T confidence: 74.1316 template_match: 0
- 1IU0T confidence: 74.0723 template_match: 0
- 1SIU0T confidence: 73.3082 template_match: 0
Frame: 11
plate0: 1 results -- Processing Time = 23.538ms.
- 1111 confidence: 67.7456 template_match: 0
Frame: 12
plate0: 10 results -- Processing Time = 26.0051ms.
- 91WHT5 confidence: 88.5164 template_match: 0
- 91WMT5 confidence: 86.0184 template_match: 0
- 91HHT5 confidence: 84.3266 template_match: 0
- 91WNT5 confidence: 82.2013 template_match: 0
- 91HMT5 confidence: 81.8285 template_match: 0
- 91WWT5 confidence: 80.6209 template_match: 0
- 91WBT5 confidence: 79.8363 template_match: 0
- 91WUT5 confidence: 78.3146 template_match: 0
- 91W8T5 confidence: 78.146 template_match: 0
- 91WRT5 confidence: 78.0328 template_match: 0
Frame: 13
Frame: 14
plate0: 10 results -- Processing Time = 27.8365ms.
- 91WHT5 confidence: 88.0287 template_match: 0
- 91WMT5 confidence: 85.7937 template_match: 0
- 91HHT5 confidence: 83.9867 template_match: 0
- 91HT5 confidence: 82.1125 template_match: 0
- 91HMT5 confidence: 81.7517 template_match: 0
- 91NHT5 confidence: 80.6883 template_match: 0
- 91MHT5 confidence: 80.1748 template_match: 0
- 91MT5 confidence: 79.8775 template_match: 0
- 91NMT5 confidence: 78.4533 template_match: 0
- 91MMT5 confidence: 77.9397 template_match: 0
Frame: 15
plate0: 10 results -- Processing Time = 26.8224ms.
- 91WHT5 confidence: 89.3865 template_match: 0
- 91HHT5 confidence: 87.0495 template_match: 0
- 91HT5 confidence: 84.6327 template_match: 0
- 91NHT5 confidence: 83.7622 template_match: 0
- 91UHT5 confidence: 82.4439 template_match: 0
- 91BHT5 confidence: 82.2798 template_match: 0
- 91MHT5 confidence: 81.777 template_match: 0
- 91RHT5 confidence: 81.6867 template_match: 0
- 91WMT5 confidence: 81.5816 template_match: 0
- 918HT5 confidence: 81.5295 template_match: 0
Frame: 16
plate0: 10 results -- Processing Time = 26.2928ms.
- 91WMT5 confidence: 88.5425 template_match: 0
- 91WHT5 confidence: 87.82 template_match: 0
- 91HMT5 confidence: 86.2628 template_match: 0
- 91HHT5 confidence: 85.5403 template_match: 0
- 91NMT5 confidence: 83.272 template_match: 0
- 91NHT5 confidence: 82.5494 template_match: 0
- 91RMT5 confidence: 81.439 template_match: 0
- 91MMT5 confidence: 81.2885 template_match: 0
- 91RHT5 confidence: 80.7165 template_match: 0
- 91MHT5 confidence: 80.566 template_match: 0
Frame: 17
plate0: 10 results -- Processing Time = 28.271ms.
- 91T5 confidence: 77.821 template_match: 0
- 91IT5 confidence: 74.9422 template_match: 0
- 91QT5 confidence: 74.8848 template_match: 0
- 91BT5 confidence: 73.4468 template_match: 0
- 91DT5 confidence: 73.3263 template_match: 0
- 91GT5 confidence: 73.2074 template_match: 0
- 91QIT5 confidence: 72.006 template_match: 0
- 91BIT5 confidence: 70.568 template_match: 0
- 91DIT5 confidence: 70.4475 template_match: 0
- 91GIT5 confidence: 70.3286 template_match: 0
Frame: 18
Frame: 19
Frame: 20
Frame: 21
Frame: 22
plate0: 10 results -- Processing Time = 25.8273ms.
- 91WMT5 confidence: 86.8737 template_match: 0
- 91WHT5 confidence: 86.2063 template_match: 0
- 91MT5 confidence: 84.4539 template_match: 0
- 91HT5 confidence: 83.7865 template_match: 0
- 91HMT5 confidence: 83.1718 template_match: 0
- 91HHT5 confidence: 82.5043 template_match: 0
- 91NMT5 confidence: 80.3898 template_match: 0
- 91UMT5 confidence: 80.0331 template_match: 0
- 91NHT5 confidence: 79.7224 template_match: 0
- 91UHT5 confidence: 79.3657 template_match: 0
Frame: 23
Frame: 24
Frame: 25
Frame: 26
Frame: 27


real 0m6.413s
user 0m6.171s
sys 0m0.143s
root@ubuntu:/mnt/LPR#
 
If you can get that frame rate, you are golden. All the LPR solutions I looked at recommend 4-5 fps with VGA to 1MP resolution at most. Just need to have it stream from the camera directly, maybe use the second stream if it's a 3MP Hikvision.
 
I was able to get OpenALPR to work at night and day with my HikVision 2632 at 12mm. So the concept appears to be doable...

Now I just need to put it all together and tie it into BI... and add a Windows GUI, etc...



Hikvision Night Settings
Iris Mode: Manual
Exposure Time = 1/150
GAIN 0
DNR 100%




detection_iteration_increase = 1.01

root@ubuntu:~# time alpr -n 4 --config alpr.conf /mnt/LPR/91w-night-1-150-3.avi |grep confid| sort -rk3
- 91WMT5 confidence: 88.2087 template_match: 0
- 91WMT5 confidence: 87.8771 template_match: 0
- 91WMT5 confidence: 87.7229 template_match: 0
- 91WMT5 confidence: 87.6766 template_match: 0
- 91WMT5 confidence: 87.4419 template_match: 0
- 91WMT5 confidence: 87.3062 template_match: 0

real 3m3.461s
user 3m1.809s
sys 0m1.486s







detection_iteration_increase = 1.07

root@ubuntu:~# time alpr -n 4 --config alpr.conf /mnt/LPR/leftturn1.avi |grep confid| sort -rk3
- 91WMT5 confidence: 91.1523 template_match: 0
- 91WMT5 confidence: 90.942 template_match: 0
- 91WMT5 confidence: 90.7279 template_match: 0
- 91WMT5 confidence: 90.6484 template_match: 0
- 91WMT5 confidence: 90.6155 template_match: 0
- 91WMT5 confidence: 90.3073 template_match: 0
- 91WMT5 confidence: 90.1631 template_match: 0



real 0m31.639s
user 0m30.949s
sys 0m0.544s
 
  • Like
Reactions: fenderman
That's what I tell people, 12mm does not cut for LPR unless you are closer than 20' away. You need an M12 lens and that is CS mount. The lens is for the DS-2CD854F-E(W) 3MP box camera.

Not sure it's worth it because you don't need 3MP and you can get brands in the U.S. in that price range and put Fuji glass for not much more. We use this lens, cheap, sharp as a tack - http://www.bhphotovideo.com/bnh/con...LPShP60kL8CFRRsfgoddmkA7w&Q=&is=REG&A=details Put it on a 1.3MP ACTi or Samsung.

As with any box cameras, you'll need an illuminator to get the plate reflectivity to overcome head or tail lights. Maybe you can use the Hik you have for illumination as those 12mm will do pretty well. In other words, keep the camera you have to be an overview camera of the scene with normal exposure and to provide illumination, use the box camera to capture the plate.
 
[TABLE="width: 100%, align: center"]
[TR]
[/TR]
[/TABLE]
[TABLE="width: 1248, align: center"]
[TR]
[TD="bgcolor: #FFFFFF"]Just got another Hik 2032 for my LPR test to replace my Hik2632, and I immediately noticed that the 2032 FOV was smaller (more zoom) and the image was much clearer that the 2632 at 12mm setting... Guess I should have read the specs...

Hikvision 2032: Angle of view: 79°(4mm), 49°(6mm), 23.2°(12mm)
Hikvision 2632 of view : 2.8 ~ 12 mm @F1.4, angle of view: 98° ~ 30.5°


I'm also noticing that POE yields a much better IQ than my ActionTec Ethernet over Power converters... I must be dropping packets causing the pixelations with the ActionTec devices. Another lesson learned.



So my LPR IQ at night is much better with the cheaper 2032. :single_eye:

Night Setting: Exposure 1/150, Gain 17 , Sharpness 100, Brightness 17, FPS
25, Video Quality: Highest, POE.

[/TD]
[/TR]
[/TABLE]
FrontYard.20140708_202622_1.jpg
 
I was just thinking about experimenting with a spare 2032 and putting in a longer lens, maybe a 20mm which would be killer for that application. Just have to find a lens that's about the same size so it fits inside.
 
Looks like you need a lot more illumination for when the vehicle is facing the cam and when the license plate doesn't have its own lighting built in!
 
Yea getting the exposure is a guess without some type of night lighting. Most vehicles have lights, so I manually expose for the plate which works pretty good. Ideally the camera at the end of the road would work better, but no access there...
 
Don't know how they do things in Texas, but here in the O.C. things are lax about front license plates. That's why we target rear plates anyway and having it lit certainly helps.
 
I took lots of measurements and found one oddball 25mm lens that should fit. Of course it has to be on the other end of the planet. I'll let you know how it works out. I have a dead 2032 that I can mock things up without risking a working camera
 
I received my 25mm from a lens company, here's a sample image taken in my backyard. Put it in a ds-2cd2032-i. I'm going to do some more testing, especially where I need it at my lake house to keep on eye on my boat. Should be fairly cheap, maybe $20. Takes about 20 minutes to put it in, 9 screws, all #1 Philips, some glue to remove, unscrew old lens, screw in new and focus, reassemble. 3 screws that hold the bracket don't fit going back in, so I left them out. I may get longer screws to make it work. Variations in color may be due to settings. Focusing was done quickly, but the brown fence is about 50' away which is good for LPR.

ds-2cd2032-i%2025mm%20-%201s.jpg


Same shot with a 12mm factory version. Sorry, the image was flipped on this one.

Hikvision%20DS-2CD2132-I%20day%20wdr%2020s.jpg