I just came across this neat gdb trick. Say you have a badly written program that's leaking file descriptors all over.. and it's in prod (the horror!) and it's imperative that you let it limp along till the patched binary comes around... GDB can close the file descriptors for you!
Here's how:
Leaky Program
Lsof tells it all. Take note of the two open descriptors to /etc/passwd
Playing around with variables in GDB. Can you guess why we chose the magic value 2147483646? For a hint, look at the last gist in this post
What does lsof think?
Bulk close of fds
Shell output from leaky
Wednesday, February 27, 2013
Thursday, February 7, 2013
Gem of a fortune - I. M. Banks.
"Good afternoon, madam. How may I help you?"
"Good afternoon. I'd like a FrintArms HandCannon, please."
"A--? Oh, now, that's an awfully big gun for such a lovely lady. I
mean, not everybody thinks ladies should carry guns at all, though I
say they have a right to. But I think... I might... Let's have a look
down here. I might have just the thing for you. Yes, here we are!
Look at that, isn't it neat? Now that is a FrintArms product as well,
but it's what's called a laser -- a light-pistol some people call
them. Very small, as you see; fits easily into a pocket or bag; won't
spoil the line of a jacket; and you won't feel you're lugging half a
tonne of iron around with you. We do a range of matching accessories,
including -- if I may say so -- a rather saucy garter holster. Wish I
got to do the fitting for that! Ha -- just my little joke. And
there's *even*... here we are -- this special presentation pack: gun,
charged battery, charging unit, beautiful glider-hide shoulder holster
with adjustable fitting and contrast stitching, and a discount on your
next battery. Full instructions, of course, and a voucher for free
lessons at your local gun club or range. Or there's the *special*
presentation pack; it has all the other one's got but with *two*
charged batteries and a night-sight, too. Here, feel that -- don't
worry, it's a dummy battery -- isn't it neat? Feel how light it is?
Smooth, see? No bits to stick out and catch on your clothes, *and*
beautifully balanced. And of course the beauty of a laser is, there's
no recoil. Because it's shooting light, you see? Beautiful gun,
beautiful gun; my wife has one. Really. That's not a line, she
really has. Now, I can do you that one -- with a battery and a free
charge -- for ninety-five; or the presentation pack on a special
offer for one-nineteen; or this, the special presentation pack, for
one-forty-nine."
"I'll take the special."
"Sound choice, madam, *sound* choice. Now, do--?"
"And a HandCannon, with the eighty-mill silencer, five GP clips, three
six-five AP/wire-flechettes clips, two bipropellant HE clips, and a
Special Projectile Pack if you have one -- the one with the embedding
rounds, not the signalers. I assume the night-sight on this toy is
compatible?"
"Aah... yes, And how does madam wish to pay?"
She slapped her credit card on the counter. "Eventually."
-- Iain M. Banks, "Against a Dark Background"
"Good afternoon. I'd like a FrintArms HandCannon, please."
"A--? Oh, now, that's an awfully big gun for such a lovely lady. I
mean, not everybody thinks ladies should carry guns at all, though I
say they have a right to. But I think... I might... Let's have a look
down here. I might have just the thing for you. Yes, here we are!
Look at that, isn't it neat? Now that is a FrintArms product as well,
but it's what's called a laser -- a light-pistol some people call
them. Very small, as you see; fits easily into a pocket or bag; won't
spoil the line of a jacket; and you won't feel you're lugging half a
tonne of iron around with you. We do a range of matching accessories,
including -- if I may say so -- a rather saucy garter holster. Wish I
got to do the fitting for that! Ha -- just my little joke. And
there's *even*... here we are -- this special presentation pack: gun,
charged battery, charging unit, beautiful glider-hide shoulder holster
with adjustable fitting and contrast stitching, and a discount on your
next battery. Full instructions, of course, and a voucher for free
lessons at your local gun club or range. Or there's the *special*
presentation pack; it has all the other one's got but with *two*
charged batteries and a night-sight, too. Here, feel that -- don't
worry, it's a dummy battery -- isn't it neat? Feel how light it is?
Smooth, see? No bits to stick out and catch on your clothes, *and*
beautifully balanced. And of course the beauty of a laser is, there's
no recoil. Because it's shooting light, you see? Beautiful gun,
beautiful gun; my wife has one. Really. That's not a line, she
really has. Now, I can do you that one -- with a battery and a free
charge -- for ninety-five; or the presentation pack on a special
offer for one-nineteen; or this, the special presentation pack, for
one-forty-nine."
"I'll take the special."
"Sound choice, madam, *sound* choice. Now, do--?"
"And a HandCannon, with the eighty-mill silencer, five GP clips, three
six-five AP/wire-flechettes clips, two bipropellant HE clips, and a
Special Projectile Pack if you have one -- the one with the embedding
rounds, not the signalers. I assume the night-sight on this toy is
compatible?"
"Aah... yes, And how does madam wish to pay?"
She slapped her credit card on the counter. "Eventually."
-- Iain M. Banks, "Against a Dark Background"
Wednesday, February 6, 2013
Automatic number plate detection
ALPR stands for automatic license plate recognition. The process typically consists of:
The hardest part of this process is reliably acquiring the plate candidate image with variables such as:
In this article, I'll be going through a gist that works for a few images. I'll cover the literature review in a followup article.
Please note that this implementation has been developed and tested with very few samples; overfitting will probably reduce it's effectiveness.
And here are more images from a few more tests in picassa:
- Identifying potential license plate candidates from an image.
- Ranking the potential plate candidates and selecting the most likely one.
- Identifying alphanumeric characters and converting them to text.
The hardest part of this process is reliably acquiring the plate candidate image with variables such as:
- Lighting conditions.
- Camera angle.
- Image noise
- Variations in the type of plates.
- Distance to plate; and consequently, the size of the plate in the image
In this article, I'll be going through a gist that works for a few images. I'll cover the literature review in a followup article.
Please note that this implementation has been developed and tested with very few samples; overfitting will probably reduce it's effectiveness.
- Load an image using opencv and python (Line 33)
- Run mean shift segmentation (I haven't evaluated the effectiveness of this) and save the image.
- Use the segmented image as the camera image.
- Convert the camera image (defaults as a numpy array) into OpenCV Mat and an IPL image (CV2 can work with numpy arrays. Plain old cv requires an IPL or Mat object).
- Convert the camera image into grayscale.
- Conduct thresholding on the image (Line 76). This means that pixels that are above the threshold become white and below black. This process is also called binarization.
- Create a mask that will be used for blob extraction that covers the entire image; setting all the pixels to 1 means that the mask will be applied everywhere.
- Invert the binarized image. License plates are mostly white with a few characters in black. Inversion means that the plate becomes mostly black with a few white character strokes (Line 94).
- Blob detection parameters. We don't want very small or very large blobs.
- Do the actual blob detection (Line 115).
- Iterate over the grayscale image adding an RGB color << this is a bug
- Mark potential blobs as black in a white image (Line 131).
- Another threshold step << This is probably unnecessary.
- Dilation and erosion to clean up the image << probably unnecessary.
- Find contours over the black images.
- For each contour, try and estimate it's overall shape. triangle? rectangle? n-gon (Line 196)? after eliminating very small and very large contours.
- Draw a bounding box.
- Calculate an estimate of the aspect ratio. Plates have a W/H ratio of 1 to 5
- Off the cuff heuristic. Largest rectangle that has an acceptable aspect ratio and is a rectangle is probably a plate. This is not always true. You might much a window or a large rectangular object...
- For the selected plate candidate, draw a bounding rect
Segmented image |
Thresholded image |
Grayscale conversion |
Blobs on a white image |
Effects of erosion on an image |
Effects of dilation on an image |
Plate candidates - from contours |
Min area box over plate candidate |
Bounding box over plate candidate |
Subscribe to:
Posts (Atom)