A little over a week ago, I got a wonderful email from Mel Gerats. He’s implemented a bunch of new features for LinqtoCRM, including Count, Skip/Take, Contains, EndsWith, StartsWith. There’s also support for chained queries and for returning CRM entities as well as anonymous types.
Mel also found a way to decouple LinqtoCRM from the web service so that it can be compiled as a separate assembly. This comes at the cost of having to define types and relations in your own code however. I rather liked the lightweight approach of querying against the web service entities and will still work with the current release. Going forward, generating the necessary types from the metadata service with a CRMMetal tool (similar to the SQLMetal tool that LinqtoSQL employs) might be the right thing to do — especially because the intermediary entities used in N:N (many-to-many) relationships are not exposed in the web service. The other major thing that needs doing is a proper projection implementation permitting all kinds of expressions in the select part of queries.
Enough babbling, head on over to the CodePlex site for code and samples of use: http://www.codeplex.com/LinqtoCRM
I’ve been mucking around with face detection a bit lately. Here’s a short guide to getting face detection running in C# in a short amount of time.
UPDATE: Recommend EmguCV for C# wrapping OpenCV, read the updated guide.
I’ve identified two free computer vision libraries that do face detection: Torch3vision and OpenCV(I’m sure there are plenty more, but these seem to be comprehensive, recently updated and freely available). Torch3vision claims to be better than OpenCV but on the other hand more people are building libraries and wrappers around OpenCV and there’s even a wrapper for .Net. While it doesn’t yet wrap the face detection components of OpenCV, it seems to be the most promising solution.
To get face detection in OpenCV to work with C#, do the following:
- Install OpenCV and OpenCVDotNet as per the instructions
- Get CVHaar.h from this discussion and place it in
C:\Program Files\OpenCVDotNet\src\OpenCVDotNet UPDATE: Dud link, read the updated guide
CVHaar.h to the solution and include it in
- Rebuild the solution
- Create a Windows forms application as described in the tutorial, but do something like the code below
public partial class Form1 : Form
private CVCapture cap;
private CVHaar haar;
private void timer1_Tick(object sender, EventArgs e)
using (CVImage nextFrame = cap.QueryFrame())
Rectangle faces = haar.detectPatterns(1.3, nextFrame, 20, 20, 1.1, 2, 1);
for (int i = 0; i < faces.Length; i++)
nextFrame.DrawRectangle(faces[i], Color.Yellow, 3);
pictureBox1.Image = nextFrame.ToBitmap();
private void Form1_Load(object sender, EventArgs e)
// passing 0 gets zeroth webcam
cap = new CVCapture(0);
haar = new CVHaar(
Happy detecting 🙂