text:
Dealer Showroom Classic Auto Showplace Troy, MI
Located in the heart of "The Motor Capital of the World" since 1984, ClassicAuto Showplace, Ltd. serves the owners (sellers) and buyers of Classic, Muscle, Hot Rod, Sports, Antique and Special Interest automobiles. The business was founded with the mission of providing the best arrangement for this special breed of automobile to change hands. We welcome your visit to our showroom open seven days a week at our Metro Detroit location. Please call or email for details.
Website: http://www.classicautoshowplace.com
Selected Filters:Make: Buick Type of Ad: Vehicles for Sale
1987 Buick Grand National
Troy, MI
1987 Buick Grand National 16,288 Miles Original Paint The Best of Care Since New Our seller has owned this immaculate Grand National for seventeen... More
Advertiser since 2000
1986 Buick Regal
Troy, MI
1986 Buick Regal T-Type, turbo charged 3.8 V-6 with full factory power and only 2 owners. Some of the many Performance upgrades include: 50#/hour... More
Advertiser since 2000


text:
October 2014 Sales & Average Price Up Year-Over-Year.
Strong growth in sales was evident across all major homes types during the first full month of fall. While sales growth has tracked strongly so far this fall, many buyers have continued to have difficulties finding a home due to constrained supply of listings. The resulting sellers' market conditions are forecast to drive strong price growth through the remainder of 2014 and into 2015 according to TREB's Director of Market Analysis.
- Websites such as century21global.com are capable of communicating in 16 widely-used languages, making your property accessible to buyers no matter their language.
- Your home is not only in front of more buyers (and REALTORS® with buyers) but real estate investors as well, bringing in a new lucrative market.
- Ultimately, more buyers mean you sell for more money, in less time.
|Currently Listed for Sale
|165 Trothen Circ
|31 Daniel Crt
|51 Wootten Way N
|17 Fry Crt
|103 Larkin Ave
|101 Pringle Ave
|78 Pringle Ave
|39 Reesorville Rd
|53 Sir Lancelot Dr
|246 Church St
|Recently SOLD - average $716,000
|24 Bishop Cres
|32 Oak Lea Circ
|**Over List Price
|30 Garnish Green
|20 Penny Cres
|69 Larkin Ave
|**Over List Price
|111 Penny Cres
|29 Meyer Circ
|58 Ramona Blvd
|**Over List Price
|9 Oak Lea Circ
|**Over List Price
|55 Ramona Blvd
|**Over List Price
Muskoka ALL Season Vacation Property for Sale - www.1209muskokabeachroad.com
**NEW Listing Opportunity**: as a Century 21 Realtor I can offer you 1,000 AIR MILES reward miles for listing your home for sale. What would you do with 1,000 AIR MILES?
Do you know anyone buying or selling in the next 12 months? Although I specialize in the Markham/York Region area, I work all over the GTA including Durham.
Please reach out to me any time with your real estate questions. 905-471-2121 www.cathycoker.com

subset: commoncrawl


text:
Dating and Relationship Advice
Ask Love Doctor provides relationship advice for singles. Most people relationship problems, but do not have anyone to provide them with counseling. Our style of giving relationship advice is to tell the truth no matter how it hurts. People in relationships seek advice from loved ones who are usually afraid to hurt their feelings. We are not that scared – if we have to counsel you to break up with a love you've been dating for long, we will. If we think you need relationship counseling to stay more committed we will give you free counseling.
Please fill the form below: It's free online dating advice!
Below are common love questions
Relationship Advice 1: Things are moving too fast
Some couples can go from casual dating to serious very quickly because they have so much in common or they have so much chemistry (I wonder where the term good chemistry came from). That is not the best because couples who have just started dating are usually blinded by love or they're simply tired of being alone and would rather be dating anyone to feel loved. It is unhealthy for the dating game to get too serious way too fast and if you find yourself in such a relationship, you might start looking for ways to step on the brakes.
The danger here is that your partner might think you might be losing interest in him/her so you have to be smart about it. Doing things like group dating, avoiding spending the nights together and making post-date plans will keep you from spending all of your free time with him/her. This will make things feel a little less serious-at least for the time being.
Relationship Advice 2: How do I know it's time for break-up?
This one might seem obvious, but you'd be surprised at how many people stay in committed relationships that make them miserable. If you or a good friend of yours is unhappy with a their partner, bringing things to an end might require a serious wake-up call. Obvious signs the dating game needs to end include physical and emotional abuse, constant arguments and the feeling that you're doing things out of obligation rather than out of love.
Relationship Advice 3: I'm I in an Abusive Relationship?
Well, you are the best person to know not us. Yes, the most common type of abusive relationship is the physical abuse where one partner (mostly the lady) becomes the punching bag. But there's an everyday kind of abuse – that's the emotional equivalent. But there are millions of people who are being psychologically abused and manipulated.
Even as he/she's pushing you away and doing things to hurt you emotionally, your partner will be begging you not to leave her and promising to change. That is the reason many people keep dating an abuser – they hope for change. Well, I got news for you – change isn't going to happen!
If you or a friend of yours is dating someone like this, you need to first recognize the problem and then take steps to end the relationship. We never advice fixing an unhealthy relationship, it's better you find someone new.
Relationship Advice 4: I'm afraid to talk about sex to my partner. How do I go about it.
There comes a time when you may feel you are not getting what you want or that you are not satisfying your woman or man. Even couples who have been dating for long can be incompatible sexually.
Like it or not, making love is an integral part of any relationship, and bad sex is often a symptom of other problems rather than a problem on its own. If you love and trust your partner, and you can communicate your needs and insecurities, then there should be no obstacles to having mind-blowing sex.
If sitting down together and having a talk session about improving your sex life is too difficult, you may find that it is easier for you to show your partner what you want done differently or guide your partner during lovemaking. You may even find that your partner might have suggestions of his/her own. If you keep an open mind and attitude, you can avoid offending him/her and actually improve both of your styles and skills in the bedroom.
Relationship Advice 5: Is she playing Hard to get?
Well, every guy faces that dilemma in life. Whether you want to keep on chasing a hard to get girl or a girl who is willing give you what you deserve without making you chase her around like a toy. That choice is a personal. But I'll rather prefer dating a girl who was a little bit hard to get than one who just jumped into bed. Again that's a personal choice.
This question will be more of dating advice for men, but it's helpful for the girls too so read on for some tips. These playing hard to get women usually give you another date when you set up a date with her, she may tell you that she is busy that particular night, to call her next week when her schedule is not as hectic. Doing this shows she's interested in going out with you, but containing her availability. She may even agree to go out with you on a certain night and then at the last minute, calls and cancels to reschedule. This one throws me off so girls don't do that especially if the man is a busy person.
A lady who is playing hard to get will want to know everything about you including your family, your life as a child, and your tastes in things like food, music and movies. Once she gets some pieces of information she will abruptly change the subject by moving the conversation elsewhere. More than likely, what she's doing is trying to catalog your interests so that she can slowly be committed with you when she's ready. Make no mistake, if a woman is asking you questions about income, run!
Relationship Advice 6: Answering calls during dates
Regularly answering cell phone calls (especially from the opposite sex) while you are out together with your partner is unacceptable. When you're on a date with your partner, letting him/her see you silence your phone or turn it off completely shows that he/she has your undivided attention. This also shows want a committed relationship because you are ready to give your partner your all. Unless you're a medical or security officer on call, there shouldn't be communications.
It is also a sign of unhealthy relationship on the way. Why can't you give your man or woman 2 hours without talking to friends on phone. I once picked up a girlfriend for a date 30 minutes away. She got a phone call from a guy and spoke on phone for close to 20 minutes. Without saying a word I turn around the car and headed in the direction of her home. She stopped the call (we ended up going on the date anyway), but that attitude did not stop. Well, she is an ex now.
Relationship Advice 7: How do I keep my partner wanting more?
The majority of people give away all the surprises and all the interesting facts about themselves way too soon. Place some limit on things like phone conversations, leaving just as the conversation good. If the person wants a committed relationship they will be eager to seek for more information about you right from the very beginning but don't give in. By being a challenge, an interested man/woman will begin making calls and suggestions to see you again and will make his/her intentions more obvious as time goes by. Do not give out all your details on your first date. Be yourself and don't try to impress.
Relationship Advice 9: What should I do on a first date
You need to make a good impression (not impress) on your first date. There are fun activities, many as simple as going for a long walk or a picnic, that won't break the bank but will still have you standing out in her eyes. Again don't spend a fortune on the first date. Women who are truly in love with you wouldn't expect you to blow up your money.
If you need personal dating advice please leave a comment below.
56 Responses so far.
Hw can a guy no if a lady love him?
I love to talk with you
hi gril love
yes dear
You know when a woman loves you just get a feeling inside your heart
How do u no if ur partner is the right guy for u
Why marriage women chet on there husband
I want a good friend, he should love me, not hurt me and don't cheat me
i'll be there for u babes
Swathy can we good friends forever or contact me on 09717829019
I don't know about your choice. It's better way to discuss about each other
I want friendship with U kindly belive me
i love my friends
i am zuhaib i will be your friend
i want to be ur friend..i wud never hurt u..
How can I trust you
Hi can you write to me.?
Just call me if u are seriouse 07448524039
hiii i love u please trust me jaaaaaan
i think. i will ur best friend.
Any girl love me.
I agree u
Yaa sweety that side i m also finding the same thing but not find yet would u be the one if yes 8750575304 thats my number msg ir whatsapp on that
What's up join
Hey friends
i just love frnd
i also love having friends and lovely chat with them
I like gud friend to me
i regard your feelings but trust me. i was alwas keeps u happy.
For how long
Just so gud like
t's a little weird at first, trusting a computer algorithm to pair you off. But three weeks (and six dates) from now, you'll realize that online dating is, for better and worse, just like regular dating—and not, sadly, like ordering a pizza online.
I need a companion
me too..
Where are you from and career
how will you no your girl loves you
I Like 2
this website very -very good world friend talking & video chat thats way
I am Madam Laura Eto a lady of 49years old, good looking, slim shape size, financially ok ,a manager in an oil exploration firm, I am looking for a nice handsome young man of say 27 years to 40years,who can always give me very worm intimate relationship,please you must be cool headed and not a trouble type, I am prepared to take care of reasonable bills and all our relationship maintenance but I will not like publicity .
At this stage , I do not want to give phone number any that is interested should reach me on my Email :email@example.com, possibly with recent picture.
If you have good physic as I desire, I will then forward you my phone and picture for discussion and dates , Email again :firstname.lastname@example.com
My whats app no iss.
Plesas msg
Where u from
Can blind dating be successful?
i wish to chat wth men ages from 55 and above
i need a friend too
no girl love me why any girl love me pls I lov her so much for ever trust me
need friend
love is sweet
Elderly tall man looking for slim tall fair ladies who are vegetarians for friendship
Must be pen minded and friendly and working and in her thirties and above send email to firstname.lastname@example.com. olve is wonderful and fulfilling


text:
Ethel Britton
- 85 years old
- Date of birth: Sep 16, 1914
- Date of passing: Oct 17, 1999
|Let the memory of Ethel be with us forever
This memorial website was created in memory of our loved one, Ethel Britton, 85, born on September 16, 1914 and passed away on October 17, 1999. We will remember her forever.
Memorial Tributes
"We are just coming in to wish you a very Merry Christmas.
We love & miss you lots R.I.P. xoxoxox"
"Hi Mom!!!
Can't believe it has been 15yrs.since you left us, And boy did I miss you; I have no one left Only Dawn & Eddie Johnny don't have time because I can't stand his wife. She is a real B****
Mom: I really miss you & Daddy"
"Mom; Now you have other son-in-law with you
Bob had left us on March 25 2014"
"I love & miss you"
Leave a Tribute:
Invite your family and friends
to visit this memorial:
to visit this memorial:
Subscribe to receive e-mail notifications when others contribute to this memorial.
1107 views
Have a suggestion for us?


text:
The Birth of Adonis
- Artist:
- School of Fontainebleau (French, 16th century)
- Date:
- mid-16th century
- Medium:
- Oil on panel
- Dimensions:
- 38 x 30-3/8 in. (96.5 x 77.2 cm)
- Credit Line:
- The Norton Simon Foundation
- Accession Number:
- Copyright:
- © The Norton Simon Foundation
[Duveen Bros., New York, Paris, London, listed in stock books as no. 30143, 1935-1937, consigned by or sold to];
[Allen Loebl, Paris, sold 2 May 1951 to];
[Duveen Bros., New York, stock no. 30143, as Primaticcio, sold 1965 to];
The Norton Simon Foundation.
Image reproduction permission may be granted for scholarly or arts related commercial use. All image requests, regardless of their intended purpose, should be submitted via email. Requests can also be made by fax or mail.
Images may be protected by copyright and other intellectual property rights. Additional permission may be required.
Approved requests for the reproduction of an image will receive a contract detailing all fees and conditions of use of the image. Upon receipt of both the signed contract and full payment, the Office of Rights and Reproductions will provide the image. A complimentary copy of the published material must be provided to the Norton Simon Museum.
Please fill our our Online Reproduction Request Form or download the Application for Reproduction Permission PDF Form and submit it to the Office of Rights and Reproductions.
|[email protected]
|(626) 449-6840 x 3300
|(626) 796-4978


text:
Deals in Diesel engine Cylinder Liner
Premier Liners
No. 4-7, Blakrishnan Street, Kattabomman Block, Jaffer Khanpet, Jaffarkhanpet, Tamil Nadu - 600083, India
We are an exalted manufacturer, supplier and exporter of Engine Liner (AL), which is made of by using quality approved Aluminum with the help of latest machinery and tools a our modern development and engineering department. Used in various industries, our engine part is known for robust structure and durability. Tested on different quality parameters, this Engine Liner (AL) is available in different specifications a
Saaskin Technologies
Guindy Industrial Area, Tamil Nadu , India
We are reckoned as a preeminent Manufacturer and Exporter of Tractor Cylinder Liner. The comprehensive range of Tractor Cylinder Liner can be availed by the clients in varied dimensions as per their requirements. These are fabricated in compliance with the international standards as well. Features Sturdy constructionHighly EfficientAnti corrosiveLong lasting finish Applications Tractor EnginesIndustrial EnginesAgricu
M/s Saras Steels Private Limited
203, Selvam Nagar, Veerappampalayam Pirivu, Perundurai Main Road, Thindal Post, Tamil Nadu - 638012, India
Cylinder Liner, Cam Shfts, Crank Shafts And Connecting Rods
Cylinder Liners for Leyland 370, 400 models, Hino models, Tata Vehicles, Tractors like P3, S3 and Sp3 and all car segments. Camshafts, Crank shafts and Connecting Rods for leyland 400 Leyland Euro, Tata 1612, 1210SE, 608, 709, 407, Indica and Ace/Magic Vehicles
Jaitech's Industries Pvt Ltd
S-440/1 E>n>industrial Estate, Alapakkam, Porur, Tamil Nadu - 600116, India
Deals in cam sleeves, Cylinder Liners, cast iron sleeves, honning sleeves, Centrifugal Casting, honning tackles
Madras Centrifugal Castings
7, Munusamy Street, Vanagaram 3rd Main Road, Athipet, Tamil Nadu - 600058, India
Deals in engine sleeves, Engine Parts
Institute Of Management Education And Training
No 49/1, Habibulla Road, Opp Sattar Sanitary Stores, T Nagar, Tamil Nadu - 360002, India
Ipl Ecpl
1, Ragavendra Colony, Melmanagar, Thandalam , Chennai 600122, Tamil Nadu , India
Raghav Industries
Office No. 13-a Srisri Flats S.s.n Nagar Kolapakkam Porur Chennai - 600116 Tamil Nadu India, Tamil Nadu , India
Post your Buy Requirement
Liners India Ltd.
441/1, Egambarar Nayakar Industrial Estate, Alapakkam, Porur, Tamil Nadu , India
Deals in Connecting Rods, Fuel Sensor
Sundar Auto Parts
15 33 Outer Circular Road United India Colony Kodambakkam, Tamil Nadu - 600024, India
Deals in oilseals, Commercial vehicles, King Pins/camshafts, Camshafts
Jti Pvt Ltd
440/1 Ekambara Naicker Indl.estate , Porur, Tamil Nadu - 600116, India
Deals in Rings, Pins, Circlips, Cylinder Liners
India Pistons Limited
Arjay Apex Centre, 24 College Road, Chennai, Tamil Nadu - 600011, India
Deals in Power Transmission Belts, Coupling, Moulded Rubber Components, Conveyor Belts, belt tensioners
Bgs International
No.4, Cosmos Castle, A Block, F 3, Kaveri Street, Saligrammam, Chennai 600 093, Tamil Nadu , India
Deals in automobile cylinder liners
Madraas Cylinder Liners
No.169 Vanagaram Road Athipet, Chennai - 600058, Tamil Nadu India, Tamil Nadu , India
Deals in Gudgeon Pins, Piston Ring
Hindustan Pistons Pvt.ltd.
19/4,pillaiyar Koil Street,cheenai-98, Tamil Nadu - 600098, India
Deals in cast iron, Cylinder Liners
Jay Jay Liners
1/53, Alinjivakkam, Tamil Nadu , India
Deals in automobile cylinder liners
Cylinder Liners Agencies P Ltd
No 1 Ragavendra Colony,melma Nagar, Thandalam Road, Near Kundrathur, Tamil Nadu , India
Deals in COOPER CYLINDER LINER
Bharath Diesel Sales &service
206/1 Andal Street Thirumal Nagar, Alagapuram, Salem-636004, Tamil Nadu , India
Deals in cast iron sleeves, Centrifugal Casting, honning sleeves, cam sleeves, Cylinder Liners, honning tackles
Madras Centrifugal Castings
7, Munusamy Street, Vanagaram 3rd Main Road, Athipet, Tamil Nadu - 600058, India
Deals in automobile cylinder liners
Madraas Cylinder Liners
No.169 Vanagaram Road Athipet, Chennai - 600058, Tamil Nadu India, Tamil Nadu , India


text:
(August 31st, 2012) On Wednesday of this week S&P downgraded Illinois' credit rating from A+ to A with a negative outlook. Here are 15 facts to get those who have not been following Illinois financial woes up to speed.
1. A recent report from State Budget Solutions shows that IL has the 5th largest debt of any state at $271 Billion. In case you are curious the other 4 states are CA ($617 Billion) NY ($300 billion), TX ($286 billion), and NJ ($282 billion).
2. IL is now the second to worst state according to S&P's rating system, with only California rated lower. Moody's rates IL behind California with the worst rating for a US State.
Earn 10% Interest or more investing in consumer loans
3. One of the major reasons S&P cited for its downgrades, is Illinois' unfunded pension liabilities. Currently the state's pension system is underfunded by $83 Billion.
4. According to the Chicago Tribune IL already spends more on its pensions ($6.75 Billion) than it does on its schools ($6.2 Billion).
5. Part of the problem is that the state is very generous to its pensioners, giving them a 3% cost of living adjustment each year, and allowing retirement as early as age 55.
6. Another part of the problem is that the return that the pension funds estimate they are going to earn on the money set aside and invested for pensions are too aggressive. For example the the $37 billion Teachers' Retirement System (TRS) currently forecasts that it will make 8.5% a year on its investments.
7. To try and deal with the problem IL's state government raised the individual state income tax 67% (from 3% to 5%) and the corporate state tax 46% from (4.8% to to 7%).
8. Instead of paying money into their pension funds in 2010 and 2011 they issued $7.2 Billion of what are known as Pension obligation bonds to help cover the costs.
9. 20% of the state's general fund spending this year is devoted to pensions compared to 13% just 2 years ago in 2010 according to the St. Louis Post-Dispatch.
10. Underfunded pensions aren't the only problem. According to Bloomberg they currently have around $9 Billion in unpaid medicaid contributions and bills from vendors that have not been paid.
11.A recent report by the Civic Federation estimates that if no changes are made that shortfall will swell from $9 Billion to $35 Billion in just 5 years.
12.To try and deal with the problem the state's governor Pat Quinn called a special one day pension reform session where basically nothing was accomplished.
13.The State's constitution prohibits cutting the money owed to pensioners.
14. Retired governor workers also have health benefits however, which are not covered under the constitution.
15. One of the proposals by the governor is to give people the choice of opting in to lower pension payouts and keeping existing health care plan or keeping current pension level and losing retiree health care.
16. Other things that are being discussed are cutting back the cost of living adjustment, diverting some of the tax revenue that currently goes to local governments to the state, increasing the retirement age and increasing employee contribution levels.


text:
Nearly half the small businesses in the Portland/Vancouver Metro region are owned by women. The Women in Business Directory offers the most complete listing of businesses owned, managed and directed by women in the region.
Once again, we will feature the recipients of the annual Iris Awards recipients, in which several of our community's women leaders are recognized for their accomplishments in business, philanthropy and efforts in the public sector. The Iris Awards are sponsored in part by Clark College, the Clark College Foundation and the Vancouver Business Journal.
Advertise. Women want to do business with women-owned businesses. Advertise in this powerful publication — which includes the e-pub — and reach a targeted audience of thousands. View advertising options or call 360-695-2442.
We are now accepting submissions here. The submissions deadline is February 22, 2018.


text:
AC Lion Application
Send your resume for review by an AC Lion recruiter. If there is a fit, we will reach out to you shortly! Please complete the form below. Fields marked * are required.
Submit Resume
Let AC Lion help you find your dream job. If you have any questions or comments, feel free to live chat us below. ____________________________________________________________________________________________________________________________________________________________________________________________________


text:
|Mummy's Fast & Easy
Hola guys!
It's Monday again and another meatless recipe is on the blog – oven baked zucchini chips with dill and garlic sauce.
These are super easy to make, they are oven baked and your kids will love them!
The only ingredients you need are breadcrumbs and eggs, and for the sauce – yogurt, mayo, dill & garlic
Make sure to serve them hot!
Here's what you need.
|Mummy's Fast & Easy
- 2 zucchinis, cut into fingers
- 4 eggs, beaten
- 200g/7oz golden breadcrumbs
- salt
For the sauce:
- 2 cups of yogurt
- 1/2 cup mayo
- 2 garlic cloves, crushed
- a bunch of fresh dill, chopped
- salt
|Mummy's Fast & Easy
- Preheat the oven to 200ºC/392ºF
- Dip the zucchini fingers into the egg mixture and then into the breadcrumbs.
- Place them on a greased baking tray and cook in the oven for about 20 minutes or until ready.
- To make the sauce – in a bowl, combine the yogurt and mayo, add the dill, garlic cloves and salt to taste.
- Mix well and serve!
Tip: Try sprinkling some grated Parmesan on the zucchini chips 5 minutes before taking them out from the oven! Yumm!


text:
Season 2, Episode 24 Weather or Not
First Aired: April 29, 2005
The forecast is unsettled when Faith takes a job as a weathercaster on "Good Morning Glen Falls." Dean Cain guests as the show's host, who takes a shine to Faith when she and Hope do a cooking segment. Of course, Hope needs her for the catering business, and that's what makes things unsettled. Grace: Tami Mansfield.
Guest Cast
Cast & Details See all »
- Premiered: September 26, 2003
- Rating: None
- Premise: A fallen soap star moves in with her straitlaced sister and her family, who are in a lather over the feisty new face in the house. Like costar (and 'All My Children' alum) Kelly Ripa, series creator Joanna Johnson is a soap veteran, having appeared on 'The… (more)
Trending TonightSee all »
Grey's Anatomy8:00 pm | ABCI'll Watch434 Watching
Supernatural8:00 pm | CWI'll Watch292 Watching
How to Get Away With Murder10:00 pm | ABCI'll Watch248 Watching
Popular Shows
Popular Movies
- 1. War Dogs
- 2. Pete's Dragon
- 3. Sausage Party
- 4. Suicide Squad
- 5. Star Trek Beyond
- 6. Jason Bourne
- 7. Captain America: Civil War
Popular Celebrities
- 1. Rami Malek
- 2. Taylor Schilling
- 3. Constance Zimmer
- 4. Emilia Clarke
- 5. Tom Hiddleston
- 6. Kit Harington
- 7. Gina Rodriguez


text:
The Delta State Police Command has recovered a seven-month-old boy, three days after the child was stolen from his parents.
The missing child was found at Agbor in Ika South Local Government Area of the state.
The state's police spokesperson, Charles Muka, said the police had arrested five suspects in connection with the incident.
Muka said the child was snatched from his mother, Linda Madaka, on July 1, during a burial ceremony at about 11 p.m. at Umunede in Ika North East LGA.
He said that the suspects, including 52-year-old Chuks Elue and his wife, and one Patience Chukwuemeka, 40, confessed their involvement in the crime.
"Detectives, based on information, trailed the suspects to No. 69 Olo Street, Umunede, where one Colins Osekihe, 24, was arrested and he implicated one Chuks Elue, a father of 14," he said.
"The two suspects led the detectives to Agbor where the child was recovered in good health from one Patience Chukwuemeka, a mother of seven children, on Tuesday. Also arrested in connection with the case include Chuks Okwudili, male, 18, and Uche Anyasi, male, 16."
Muka said the suspects confessed that they had bargained to sell the child to Patience Chukwuemeka for N250, 000.
He said that efforts were on to arrest other fleeing suspects, adding that the suspects would soon face the full wrath of the law.
Muka, however, warned parents and guardians to diligently secure their children and wards from syndicates, stealing children.


text:
Science fiction prison planet novel
BSCIENCEFICTION010. The Omega Cage, by Steve Perry and Michael Reaves. Science fiction survival paperback. 244 pages. An Ace book published in 1988 by the Berkeley Publishing Group.$3.49
BSCIENCEFICTION011. Planet of the Gawfs, by Steve Vance. Science fiction paperback. 173 pages. Copyright 1978 by Nordon Publications Inc.$2.95


text:
Someone gave me a house plan with a 7 ft wide and 21 ft long entry hallway into an 1800 sq ft house. In you opinion, is the entryway too big? How big are normal entryways?
I know that entryway widths vary, but I'm wondering if 7 ft is a bit too much?
Thank you so much beforehand.
Get Help from Bob Vila
- Give-Aways & Offers
- Monthly Must Do's
- DIY Project Ideas
- Step-by-Step Guides
- Inspirational Photo Galleries


text:
This morning on MSNBC's Morning Joe, potential Presidential candidate Gov. Tim Pawlenty stood his ground against Stockholm Joe Scarborough's attacks on the attacks on Obamacare:
Pawlenty has done what few Republicans have been able to do -- calmly address the concerns behind the "death panel" claims without buying into the language, but without entirely dismissing it either. He took a very loaded question and got his message across without appearing abrasive. In a world of Obama Derangement Syndrome, that's a huge plus.
I'm liking Pawlenty more and more. I'm still unclear as to what Pawlenty's overarching philosophy might be -- the "Sam's Club Republicans" concept needs fleshed out a bit -- but he's performing well so far. I certainly prefer him to Huckabee, and probably to Romney. Whereas Pawlenty may (may) turn out to be squishy in a few areas, Romney has been all over the map. I'll take consistency over rhetoric any day.
On the subject of Obama's address to Congress, when even the Associated Press is doing fact checks and calling the math "iffy", there's a problem. Matt Welch at Reason.com wrote a response that is so good and complete I wish I'd written it myself. (Reason is libertarian, not conservative.)
Friday, September 11, 2009
Pawlenty standing his ground on Obamacare
Posted by JoeCollins at 10:18 AM
Labels: Healthcare, media, Obama


text:
Supplier Homepage Product X ray scanner X-ray Scanner Luggage Airport Security Xj8065
X-ray Scanner Luggage Airport Security Xj8065
|FOB Price:
|Get Latest Price
|Min. Order:
|1 Piece
|Production Capacity:
|1000 Units / Month
|Transport Package:
|Wood Package
|Payment Terms:
|L/C, T/T, Western Union
Request a custom order and have something just for you!Send Customized Request
Basic Info
- Model NO.: XJ8065
- Customized: Customized
- Type: Baggage Scanning
- Steel Penetration: 43mm
- Trademark: GuardSpirit
- Origin: China
- Certification: CE, ISO
- Alarm Form: Audible Alarm
- Usage: Personal, Luggage, Handbags
- Application: Airport, Bus/Train/Subway Station
- Specification: CE
- HS Code: 9022191090
Product Description
X-ray scanner luggage airport security XJ8065
*High resolution images
*Simple User-friendly operation
*Strong Image storage capacity
*Automatic Self-diagnostic maintenance system
*One Key shutdown control
*Tunnel Size......800mm(W)*650mm(H)
*Load Weight.........150Kgs
*Conveyor Speed....0.2-0.23m/s
*Radiation Leakage.0.54 μG/h
*Penetration......34mm steel
*X-ray resolution...40WAG
X-Ray Generator:
*X-ray beam direction.....From Top
*Beam Divergence..... 80°
*Tube Voltage.........80-160Kv
*Electronic Current......0.2-1.25mA
*Cooling............Sealed oil cooling + 100% Dutycycle
Image Function:
*X-ray Converter Arrangement. .Dual Energy L-shaped photodiode array detector
*Inorganic/Organic Stripping... Organic substances display in Orange, Inorganic
substances display in blue, mixtures display in green
*Maximum Image Resolution.....1024*768
*Image Storage............100,000pcs
*Image Display Color.........Black/White & Color
*Grey Level...............65536
*Zone & Zoom............ ..1-9 image zones, 2,4,8 times zooming
*Other Function............Alarm, Review, Density Enhancement, Negative/positive image,
Light/Dark Enhancement, automatic count, One Key Power Off, Working status display, Date & time display, Rush Stop Protection,
Dangerous Alarm, System Failure Alarm etc
Working Environment:
*Work Temperature & Humidity. 0°C~+45°C/ 20%~95%(Non Cooling),
-10°C~+45°C/ 5%~95%(Optional)
*Storage Temperature & Humidity. -40°C~70°C/ 5%~95%(Non Cooling)
Shenzhen Xinyuantong Electronics Co., Ltd.
Shenzhen Xinyuantong Electronics Co., Ltd.was established in 2000 with the registered capital of RMB 31.5 million, the total business space is 12,000 m2, there are more than 260 employees, including 120 research, engineering and technical personnel; we are one professional high-tech company which provide the solutions to the public safety, and provide the complete production and integration services.
The Company is committed to the technical development and research of "GuardSpirit" series of security products, the developed products have been granted by 28 national patents, and have formed five categories of products including the metal detectors, X-ray baggage scanners, test products for radioactive materials, vehicle chassis inspection products, EOD and anti-explosion products.
Our Company has been committed in the business of access security, security equipments and services for 14 years, and during the period, we have provided safety and security services for hundreds of large-scale events, meetings, exhibitions, political and legal departments, railways, highways, ports and other places, including 26th Summer Universiade Shenzhen 2011, World Expo 2010 Shanghai, 16th Asian Games Guangzhou 2010, 14th FINA World Championship -Shanghai 2011, 24th Winter Universiade Harbin 2009, Olympic Games Beijing 2008, Wuhan-Guangzhou high-speed railway, Beijing-Shanghai high-speed railway and other key events and projects.
One year warranty
You can contact us if there is any problem with our product.We will resolve
the problem without any delay.
Continuable service
You can contact us via E-mail,Skype,telephone,cellphone,QQ and so
on.We can receive your request anywhere and anytime.
Necessary certifications are available.Our products have passed authorization
test,they are high quality and safe.
Please contact me if you are interested in any product,I can send more information to you.
Welcome to add me on Skype,I am on Skype all the time.
Shenzhen Xinyuantong Electronics Co.,LTD
ADD: Building 3, Xiaxue Industrial Park, Bantian Street, Longgang District, Shenzhen, China
X-ray Baggage Scanner//Walk Through Metal Detector //Hand Held Metal Detector//Under Vehicle Inspection System


text:
first edition Hardcover
by Mortimer, R. C
Clarendon, 1939. Hardcover. Very Good/Very Good. London: Oxford University Press, 1939. First edition. Hardcover. 194 pp. Very good, in very good price clipped jacket. Minor bumping to extremities. Bookseller label on front pastedown. Jacket has a couple closed tears, longest one inch. Spine sunned with light damp staining. (Inventory #: 040461)


text:
JetBlue SWOT Analysis
Employee skills are not enough to hire person, HR also evaluate the other attribute such as personality and attitude.
Jet blue is the strong brand among the US people.
Jet blue has been efficiently utilization the resources which results in low operating cost.
Efficient and talented employee help Jet Blue to perform operation in a better way to facilitate its customers.
Consumer are satisfied from the services offered by Jet Blue.
JetBlue was named the number one U.S. domestic airline by Coned Nast Traveler magazine's "Readers' Choice Awards" for the sixth year in a row.
Former employees of Southwest Airlines are currently working with Jet Blue.
Better use of technology, reservation are handled online with the unique reservation system.
Jet Blue is still new in the industry as compared to other Airlines.
Weak financial reporting, highlighted in the audit.
It has been using a single fleet
Jet Blue financial position is strong, so it can think for further expansion nationally and internationally.
Add up more services for the passengers.
Increase number of flights.
Joint ventures with other Airlines for new market development.
Terrorism is the major concern after 9/11 Incident.
Raise in fuel prices
Strong competition from AMR Corporation, Southwest Airlines and UAL Corporation.
Employee Unions


text:
Did you know that educating youth (and ensuring girls and women's education) improves the health status of children and the economic development of their communities? Statistics reveal that for every 1% increase in education there is a .3% increase in economic growth.
Now more than ever, youth in Pakistan need access to safe and quality education. Prior to the floods, only 63% of Pakistani students finished primary school. With so many schools damaged or being used for other public needs in the aftermath of the floods, over a million students are now without schools. Without education, critical thinking capabilities and economic opportunities, impoverished youth are susceptible not only to extreme poverty but even more vulnerable to recruitment into extremist organizations.
Fortunately none of our schools were directly affected by the floods, but the long term impacts will be felt. Access to clean water and health care are formidable problems. Fuel prices have skyrocketed. Ensuring access to healthy meals will become more difficult since massive crop destruction took place during the floods and there is huge inflation of food prices. The start of our school year was delayed but is now successfully in session. We are determined more than ever to make sure that underserved youth in Pakistan have access to quality education which increases self-confidence, improves the ability to make informed decisions and ensures marketable/professional skills, thereby allowing the youth to grow up to become contributing members of society and capable of assisting with the reconstruction of an improved Pakistan. We welcome your assistance with our goals.
Visit us here – http://www.marshalldirectfund.org/get-involved


text:
Here in Spain during the holidays, almonds tend to take center stage. They can be found in all sorts of holiday goodies, from turron to candy covered almonds to, of course, the St. James cake, or tarta de Santiago. This almond cake can really be served at any time of year, and it is seen year round in Galician restaurants, being a cake that is originally from the region of Galicia. Still, for some reason, it just seems to fit better this time of year.
The St. James cake traditionally uses 33%sugar, 33%almonds, and at least %25 eggs. The remaining percentage is what varies from recipe to recipe. Most people add lemon zest and/or cinnamon. Some people add a little bit of wheat flour.
Normally, though, the cake doesn't use any wheat flour or flours with gluten, so it is a great option for celiacs and others avoiding gluten.
Those who are avoiding white sugar can easily substitute it with other sugars or even honey, like I did. Preparing it with honey converts it into a great recipe for those following GAPS or paleo diets as well.
I find the traditional version of this cake a bit too sweet for my taste, but I'l share the traditional recipe for it, too, for those who want it.
Tarta de Santiago (St. James Cake) – A Spanish Almond Cake
- 250 g almond flour 2.5 cups (coarsely ground works well here)
- 250 g sugar (For GAPS/Paleo, I used a little more than 1/2 c. honey; to taste.)
- 5 egg
- 1/2 tsp. cinnamon
- zest from one lemon
Preheat oven to 175ºC (350ºF)
Mix all ingredients together. Some people prefer to beat the eggs separately to add volume to the cake. Others don't. Whether or not you choose to do so is a matter of preference.
Grease the pan(s). You can see I tried in both a cake pan and muffin tins.
Pour mixture into the greased pan(s).
Bake until golden. The time it takes depends upon the size pan you use.
I made mine with honey, not because I follow a GAPS or Paleo diet, but because I'm trying to reduce the amount of processed foods we eat. I believe honey to be a healthier alternative.
Also, the cake is traditionally covered with a sword of St. James cut out of paper, and then a layer of powdered sugar is sprinkled over top. Once the paper is removed, the outline of the sword remains. I did add a layer of powdered sugar to my larger cake, but didn't add it to my muffins. Obviously the sugar is only decorative, so you can omit it if you prefer.
To be honest, despite the fact that almond cakes are the most popular types of cake served in Spain, I can't pretend that they are my favorite. I eat them, but they aren't my first choice. My son, however, loves them, as do most people here.
I saved the small cakes that I had made in the muffin tins for my son's snack at school, and he kept asking for more, even after the cakes were gone! So, I guess I will have to make these again soon.


text:
8th - 23rd April 2017
Enjoy a fun-packed, full day out at Warwick Castle this Easter, whatever the British weather has in store!
Book in advance online to get our Rainy Day Guarantee!
Horrible Histories Maze
Choose your path as you muddle through time and face fun challenges to unravel history's best kept secret in the World's first Horrible Histories adventure maze!
Invade Viking waters, survive the trenches, uncover evil plots and escape the maze before things go horribly wrong!
Horrible Histories: Wicked Warwick Live Stage Show!
'one of the greatest history lessons anyone will ever have'
Stratford Herald
Horrible Histories are live on stage with a truly unique, seen-nowhere-else Wicked Warwick Show!
Brought to us in partnership with The Birmingham Stage Company.
The Mighty Trebuchet
See the largest working siege machine IN THE WORLD fire twice a day with a brand new show! The colossal catapult is an authentic recreation of one of the biggest and most deadly military machines of all time.
Flight of the Eagles
Watch in awe as our spectacular birds of prey display showcases these beautiful and powerful creatures - including vultures and eagles flying from the castle ramparts!
Time Tower
Enter the Time Tower & witness the birth of Warwick Castle, which once controlled the middle of England for over a thousand years. These ages have now passed along with their stories...until now.
And there's more!
Little princesses can thrill at dressing up and hearing stories of the past at The Princess Tower, whilst you can experience the sounds and smells of yesteryear at Kingmaker: Eve of Battle which tells the story of how Richard Neville, the 16th Earl of Warwick, prepared his household for war. Are you brave enough to enter the Castle Dungeon?
With all of this and more included in your Castle ticket, there's so much to see and do at Warwick Castle this half term. Plus, book online now to take advantage of our Rainy Day Guarantee and save over 30%!
Rainy Day Guarantee
Even though we can promise you'll enjoy your visit to Warwick Castle, unfortunately we can't guarantee nice weather! Therefore to alleviate any 'weather worries' you may have, we have our Rainy Day Guarantee.
Pre-book your tickets online in advance of your visit and if it rains continually for one hour or more during your visit, we will guarantee you a FREE return visit to the Castle, Grounds and Gardens!


text:
just a few good pictures...
I must just be really lucking out with my clients lately. My girls are incredibly genuine, radiant, funny, trusting andView full post »
I've been learning a lot this year. Perhaps I'm growing. Perhaps I'm maturing. Or perhaps {andView full post »
When planning this session with Colleen, her only request of me, was to find water :). As a California-girl myself, ofView full post »
This is the second pregnancy I've had the honor of documenting for Carissa and her beautiful family. And I justView full post »
© 2018 Brianna Anderson Photography|ProPhoto Photographer Blog | Design & Development by Aniya Jade Design


text:
Ducks 4, Canucks 3 (OT): Corey Perry scored a power-play goal 4:59 into overtime as Anaheim posted its 13th win in 14 games and remained unbeaten in regulation at home (17-0-2).
Ducks 4, Canucks 3 (OT): Corey Perry scored a power-play goal 4:59 into overtime as Anaheim posted its 13th win in 14 games and remained unbeaten in regulation at home (17-0-2).
Nick Bonino forged a 3-3 tie with 1:27 remaining in the third period after converting Daniel Winnik's centering feed and nearly ended the contest by stripping Daniel Sedin of the puck before drawing a penalty on a partial breakaway. Perry ended the wild affair with six-tenths of a second remaining in overtime after his shot from the left circle sailed between the pads of rookie Eddie Lack, who made a season-high 45 saves on his 26th birthday.
Saku Koivu and Matt Beleskey also tallied for the Ducks and Andrew Cogliano notched an assist one day removed from signing a four-year contract extension worth $12 million. Jonas Hiller finished with 17 saves to extend his franchise-best winning streak to 11 games.
Captain Henrik Sedin collected a power-play goal and two assists and Ryan Kesler also scored with the man advantage for the Canucks, who have dropped four in a row (0-2-2). Defenseman Kevin Bieksa's point shot gave Vancouver a 3-2 lead early in the third period and Daniel Sedin notched three assists.
After Vancouver jumped out to a 2-0 lead in the first period, Anaheim pulled even after registering the first 17 shots of the second and 20 of 22 overall. Koivu deflected Jakob Silfverberg's bid past Lack 24 seconds into the session before Beleskey backhanded Kyle Palmieri's backhanded saucer pass between the pads of the netminder at 16:38.
GAME NOTEBOOK: Vancouver signed G Rob Laurie, 43, to serve as the team's backup with G Roberto Luongo injured during Saturday's 3-1 loss to Los Angeles. Laurie also served as a backup for Anaheim last season. ... The Canucks jumped out to a fast start, securing 10 of the game's first 11 shots while making good on their first two power-play opportunities. Kesler's one-timer from the top of the left circle opened the scoring 9:40 into the contest before Henrik Sedin's slap shot from above the right circle caromed off the stick of Anaheim D Cam Fowler and into the net nearly two minutes later. ... Canucks RW Zack Kassian suffered a facial laceration after he was clipped by the skate of teammate LW Tom Sestito in the second period.


text:
Latest source code can also be downloaded from
This article put together various technologies in facial image processing, 3D visualization, image manipulation and computer vision. It involves using 3D face meshes created by
Kinect 2.0, .NET classes in
Aforge .NET Framework and
Facial recognition is currently one of the most popular
biometric identification methods.
Face capturing is as simple as just taking the photo of a person's face. However for the facial photo to be useful for
facial recognition, certain facial image specifications must be met.
- The face must be in frontal view
- The image must not be stretched unevenly
- The face should be evenly lighted
- The subject must be in a neutral expression state with eyes open and mouth closed
Photos that met these specifications would qualify as suitable registable photos. For use with an automated
Facial Recognition System, these photo would be the source for
facial feature file generation. The
feature files are mostly unique to the source photo and store summarizied
facial features that can be used for comparision.
When two feature files match, there is a high likelihood that the subjects to the orginating photos are the same person.
One of the main challenges facing
Facial Recognition System is the difficulty in getting good frontal images for matching. The camara should be suitably placed to get full frontal view of the subject. However, people varies in height and also their inclination to look slightly off-frontal to the camera. The camera could be looking slightly sideway, top down, bottom up or at some angle such that the captured photo would not be ideally full frontal.
Depending on the
Facial Recognition System, internal automated correction could be done by the system before
feature file is generated, but matching score would be affected.
The other challenge is lighting. Normally most registered photos are of reasonably good quality as these are captured in mostly controlled enivronment such as in a specialized photo booth. Photos that are captured for matching in most cases are taken in environment that could have changing lighting condition, such as a
Facial Door Access Unit near a window.
For testing the accuracy and reliabilty of a
Facial Recognition System, test cases would be needed with subjects having their faces taken at various angles and lighting conditions. These images would be used to test against controlled images of the same subject. It is a time consuming and tedious process and requires active participation of dedicated test subjects or alternatively we need images captured from a live system.
The motivation behind the idea to this article is to come up with test cases that can be recreated from a frontal image, varying the lighting conditions and camera angle.
The Technologies
Even with sophisticated commercial tool, creating a realistic
3D Facial Model is not a trival task.
With the release of
Kinect X-Box One, we found just the right technology to create a realistic
3D Facial Model without much difficulties. The
Kinect 2.0 sensor is a highly sophisticated equipment. It has a 1920X1080
Full HD resolution camera that capture image of reasonably good quality. There is also an
Infra-red depth sensor that can output depth image in 512X424 resolution. The depth info from this depth sensor is probably the best currently commercially available. Basically, these are the only raw frames (each at 30 frames per seconds) from each of the camera/sensor. There are however other computed frames available (also at 30 frames per second). These are
Body Index,
Face Basic and
HDFace frames.
Especially interesting is the
HDFace frames. These are
3D World coordinates of tracked face(s). Each face has 1347 vertices. 3 points connected up would make a 3D triangle surface.
Kinect 2.0 uses a set of standard
triangle indices reference with 2630 triangles. With 2630 surfaces, the
face model would indeed be realistic.
3D model created from the
HDFace frame can be rendered by the .NET
System.Windows.Media.Media3D classes, using
MeshGeometry3D for modelling,
Viewport3D for viewing in WPF window,
AmbientLight and
DirectionalLight for rendering the model at various lights and view angles.
AForge .NET classes provides the filters to process source image, varying the brightness and contrast.
OpenCV provides
HaarClassifier for finding face and eyes in face input images.
System.Drawing .NET classes are used for GDI+ image manipulation such as stretching and rotation.
System.Windows.Media classes are used for presentation in WPF window.
Mesh Files
GeometryModel3D class for 3D image processing consists of 2 basic components:
GeometryModel3D.Geometry class requires the following information to be defined
Position consists of vertices defined in
3D World coordinates. Each vertex is refered by their order in the
Position vertices collection. For example, to define a cube, we need 8 vertices, one at each corner of the cube. The order we input the coordinates to the
Position collection is important.
Positions="-0.05,-0.1,0 0.05,-0.1,0 -0.05,0,0 0.05,0,0 -0.05,-0.1,-0.1 0.05,-0.1,-0.1 -0.05,0,-0.1 0.05,0,-0.1"
In the above example -0.05,-0.1,0 is the first vertex and will have index 0.
TriangleIndices refers to the list of indices in groups of 3 that define each surface in the
3D model.
TriangleIndices="0,1,2 1,3,2 0,2,4 2,6,4 2,3,6 3,7,6 3,1,5 3,5,7 0,5,1 0,4,5 6,5,4 6,7,5"/>
In the above example, we have defined 16 triangles each with 3 vertices, collectively defining all the surfaces of a cube. The first 3 indices 0,1,2 refer to
Position vertices with index 0, 1 and 2. This will make up a surface in the
3D model.
For the surface to be rendered, we can define a painting
brush using the
GeometryModel3D.Material class. But the
brush would need to know what
texture/color to apply to the surface. This is the role of the
TextureCoordinates="1,1 0,0 0,0 1,1 1,1 0,0 0,0 1,1"
There are 8 coordinates above, each to be applied to one vertex of the cube. The first coordinate is (1,1). How does this define a
color or
texture? These number only make sense when we refer to the
brush to paint the surface.
For this example, we will refer to a
LinearGradientBrush. This
brush allows a gradient to be defined from a
StartPoint to an
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="AliceBlue" Offset="0" /> <GradientStop Color="DarkBlue" Offset="1" /> </LinearGradientBrush>
In the example above, imagine an area 1 unit by 1 unit. The 2 opposite corners will have coordinates (0,0) and (1,1). A value of 0 refer to the color
AliceBlue, and 1
DarkBlue. Any number in between is a shade between these 2 colors. Defining colors this way allows us to get a continuous
gradient map. Each point in the 1 X 1 area will be mapped to a defined color.
Going back to our
TextureCoordinate value (1,1) for vertex index 0 for the cube, the color would be
DarkBlue based on this
LinearGradientBrush brush.
Similarly, we can have an
ImageBrush. An
ImageBrush would have an
image source. The image of the
image source would be used to define
texture/color. Again the value range for the coordinates would be (0,0) to
(0,0) on the image and (1,1) refer to (1920-1, 1080-1), the right bottom corner of the image. A
TextureCoordinate (0.5,0.5) would be mapped to (0.5X1920-1, 0.5X1080-1). In this way, we would be able to get the image point for any
TextureCoordinate in the range of (0,0) -(1,1).
The mesh file for the face model consists of 1347
Position vertices, follows by 1347
TextureCoordinates points. The texture file is a 1920X1080 image that would be used as the image source for the
ImageBrush for rendering the
3D model.
triangle indices defining all the surfaces in the
face model are the same for all
face models generated by
Kinect 2.0. I have included these indices in the file tri_index.txt. There are 2630 surfaces defined by 7890 indices.
There is also another file that lists out the image coordinates of these face points::
The information in these files are all derived from data generated using
Kinect 2.0
sensor with the
Kinect 2.0 SDK API. In this article, I would not be covering
Kinect specific areas. If you are interested, refer to the
HDFace example in the
Kinect 2.0 SDK.
HDFace points are not very well documented, possibily because there are just too many of them. It would not be easy to come up with names for each of the 1347 points. However, from my investigation, the face points of interest to us are
- 328-1105 (right eye is between these 2 points)
- 883-1092 (left eye is between these 2 points)
- 10 (center of base of upper lip)
- 14 (nose base)
- 0 (chin)
Face Images
The idea behind this article is based on the
Kinect 2.0 SDK
HDFace example. In that example,
HDFace frames and
Color frames are processed in sync. Using
Kinect 2.0 Coodinate Mapper, each
HDFace point can be mapped to its corresponding color coordinate in the
Color frame, and
TextureCordinate can be generated accurately on the fly using the
Color frame as the
image source for the
I took snapshots of a set of synchronized
HDFace and
Color frames, record the
TextureCoordinate generated, and the standard
TriangleIndices. This would provide all the information I need to reproduce the
3D face model without the
Kinect 2.0
However the model can only be used for that specific texture (
Color frame) saved. The
Color frame is 1920X1080, but the face image only occupies an area of about 500X500. If we can replace that area with another face, we could possibly have that face rendered on the
3D face model!
This is like putting on a face mask. But it has to be accurately mounted.
For precise replacement of the face area, we would need to know the orientation of that face. Is it looking sideways, up or down, and are the eyes level and open, is the mouth closed? To get a replacement face of the same orientation would be difficult.
We will need a
standard for face images. The original
Color frame recorded for each of the
3D model has the face in the
standard specification. Essentially, it is the same
standard adopted for
ID photos: full facial frontal, neutral expression, eye open, mouth closed. Image resolution should be kept at about 400X400 to 800X800.
For the replacment face, we need to adhere to the same standard. Nonetheless in Version 3.0, we can work with non frontal face input using custom meshes (See the Update section at the end of this article).
Face Fitting
Bad Fit
Good Fit
The original texture is 1920X1080. The face image may be located somewhere in the center. To replace that face, we would need to anchor the new face at some invariant points. The points chosen should be at the main features area of the face. Most
Facial Recognition System defines the eyes, nose and mouth as important features. Some also include cheeks and eye-browses.
For this article, I identify 5 points:
right eye,
left eye,
upper-lip base and
The new face would not fit similarly well to each of the
face models. We need a way to calculate the
goodness of fit. The best fit would be the ones where the 5 points all aligned after a uniform stretching horizontally and vertically, (ie an enlargement transformation). If we have sufficient
face models, we may be able to find one or more ideal ones that fit. With just 6
face models, we may not get an ideal fit.
The face fitting algorithm:
- 1) Find the distance between the 2 eyes in the reference (the original face) image
- 2) Find the distance between the 2 eyes in the new face image
- 3) Find the distance of the nose-base to the mid points of the eyes for the reference image
- 4) Find the distance of the nose-base to the mid points of the eyes for the new image
- 5) Stretch the new image horizontally by the factor obtained by dividing 1) by 2)
- 6) Stretch the new image vertically by the factor obtained by dividing 3) by 4)
- 7) For the new stretched image, find the vertical distance from nose-base to upper-lip base
- 8) For the reference image, find the vertical distance from nose-base to upper-lip base
- 9) For the new image, stretch( or compress) from the nose-base down vertically by the factor obtained by dividing 8) by 7)
- 10) Now the mouth would be aligned. For the new re-stretched image, find the vertical distance from the upper-lip base to the chin
- 11) For the reference image, find the vertical distance from the upper-lip base to the chin
- 12) Final step: Stretch (or compress) from upper-lip base down vertically by the factor obtained by dividing 11) by 12)
- Now all face points would be aligned
However for some
face models, the resulting new image may be significantly deformed, see the figure labeled Bad Fit above.
For the measurement of goodness of fit, I devise a method based on
stretch factors. There are 4
stretch factors involved:
- 1) factor1 =Eye to eye
- 2) factor2= Nose-base to eyes mid point
- 3) factor3=Nose-base to upper-lip base
- 4) factor4=Upper-lip base to chin
For 1) and 2) we want these values to be as similar as possible, we calculate the absolute ratio (factor1-factor2)/(factor1). Let's call it
eye-nose error.
For 3), we want to keep to the factor as close to 1.00 as possible, we use the absolute ratio (factor3-1). Let's call it
nose-mouth error
For 4), we also want to keep the factor as close to 1.00 as possible, we use the absolute ratio (factor4-1). Let's call it
mouth-chin error
Since the
eye-nose streching is operated on the entire face, it is assigned a higer
weightage. Similarly the
nose-mouth streching involves stretching from the nose down, and the
mouth-chin stretching involves only stretching from mouth down, it is assigned a
weightage smaller than the
eye-nose error, but larger than
mouth-chin error.
The current weightage is 4 for
eye-nose, 2 for
nose-mouth and 1 for
Camera, Lights, Action
Figure 1: The Setup
Figure 2: Lighting up a cube
Figure 3: View changes with Mesh Translation
Figure 4: View changes with Camera Rotation
Xaml markup code for the
Viewport3D set up:
<Viewport3D HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" x:Name="viewport3d" RenderTransformOrigin="0.5,0.5" MouseDown="viewport3d_MouseDown" MouseRightButtonDown="viewport3d_MouseRightButtonDown" > <Viewport3D.RenderTransform> <ScaleTransform ScaleX="1" ScaleY="1"/> </Viewport3D.RenderTransform> <Viewport3D.Camera> <PerspectiveCamera Position = "0, -0.08, 0.5" LookDirection = "0, 0, -1" UpDirection = "0, 1, 0" FieldOfView = "70"> <PerspectiveCamera.Transform> <Transform3DGroup> <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="0 1 0" Angle="{Binding Value, ElementName=hscroll}" /> </RotateTransform3D.Rotation> </RotateTransform3D> <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="1 0 0" Angle="{Binding Value, ElementName=vscroll}" /> </RotateTransform3D.Rotation> </RotateTransform3D> <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="0 0 1" Angle="{Binding Value, ElementName=vscrollz}" /> </RotateTransform3D.Rotation> </RotateTransform3D> </Transform3DGroup> </PerspectiveCamera.Transform> </PerspectiveCamera> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <Model3DGroup> <AmbientLight x:Name="amlight" Color="White"/> <DirectionalLight x:Name="dirlight" Color="White" Direction="0,0,-0.5" > <DirectionalLight.Transform> <Transform3DGroup> <TranslateTransform3D OffsetZ="0" OffsetX="0" OffsetY="0"/> <ScaleTransform3D ScaleZ="1" ScaleY="1" ScaleX="1"/> <TranslateTransform3D OffsetZ="0" OffsetX="0" OffsetY="0"/> <TranslateTransform3D OffsetY="-0.042" OffsetX="0.469" OffsetZ="-0.103"/> </Transform3DGroup> </DirectionalLight.Transform> </DirectionalLight> </Model3DGroup> </ModelVisual3D.Content> </ModelVisual3D> <ModelVisual3D> <ModelVisual3D.Content> <GeometryModel3D> <GeometryModel3D.Geometry> <MeshGeometry3D x:Name="theGeometry" Positions="-0.05,-0.1,0 0.05,-0.1,0 -0.05,0,0 0.05,0,0 -0.05,-0.1,-0.1 0.05,-0.1,-0.1 -0.05,0,-0.1 0.05,0,-0.1" TextureCoordinates="0,1 1,1 0,0 1,0 0,0 1,0 0,1 1,1" TriangleIndices="0,1,2 1,3,2 0,2,4 2,6,4 2,3,6 3,7,6 3,1,5 3,5,7 0,5,1 0,4,5 6,5,4 6,7,5"/> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <MaterialGroup> <DiffuseMaterial x:Name="theMaterial"> <DiffuseMaterial.Brush> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="AliceBlue" Offset="0" /> <GradientStop Color="DarkBlue" Offset="1" /> </LinearGradientBrush> </DiffuseMaterial.Brush> </DiffuseMaterial> </MaterialGroup> </GeometryModel3D.Material> </GeometryModel3D> </ModelVisual3D.Content> </ModelVisual3D> </Viewport3D>
Viewport3D contains the following elements:
Viewport3D.Camera contains
PerspectiveCamera. The camera specifications are
<PerspectiveCamera Position = "0, -0.08, 0.5" LookDirection = "0, 0, -1" UpDirection = "0, 1, 0" FieldOfView = "70">
The camera is positioned at
World coordinates (0,-0.08,0.5). Refer to the Figure 1: The Setup.
LookDirection (0,0,-1) means that the camera is looking in the negaive Z direction.
This camera is set up with
Rotational Transformation feature about X, Y and Z axis:
<PerspectiveCamera.Transform> <Transform3DGroup> <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="0 1 0" Angle="{Binding Value, ElementName=hscroll}" /> </RotateTransform3D.Rotation> </RotateTransform3D> <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="1 0 0" Angle="{Binding Value, ElementName=vscroll}" /> </RotateTransform3D.Rotation> </RotateTransform3D> <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="0 0 1" Angle="{Binding Value, ElementName=vscrollz}" /> </RotateTransform3D.Rotation> </RotateTransform3D> </Transform3DGroup> </PerspectiveCamera.Transform>
The angles of rotation are all bound to values from the
ScrollBars: Rotation about X Axis="1 0 0″ bound to
vscroll, Y Axis "0 1 0" bound to
hscroll, and Z Axis "0 0 1" bound to
vscrollz. Valid angle is from -180 to 180 degree. Scrolling these scrollbars will cause camera position to change. The resulting view would seem like the viewed object has been rotated. See Figure 4: View changes with Camera Rotation.
There are 2
ModelVisual3D.Content for
One includes the
Model3DGroup which
<AmbientLight x:Name="amlight" Color="White"/> <DirectionalLight x:Name="dirlight" Color="White" Direction="0,0,-0.5" >
The default color for the lights are all set to White. All objects will be illuminated by white light.
In the source code below, we change the colors for these lights based on values from the
private void sliderColor_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { if (sliderRed!= null && sliderGreen!= null && sliderBlue!= null && sliderAmb!=null) { Color color = Color.FromArgb(255, (byte)sliderRed.Value, (byte)sliderGreen.Value, (byte)sliderBlue.Value); if (labelColor != null) { labelColor.Content = color.ToString(); labelColor.Background = new SolidColorBrush(color); } if (dirlight != null) dirlight.Color = color; Color amcolor = Color.FromArgb(255, (byte)sliderAmb.Value, (byte)sliderAmb.Value, (byte)sliderAmb.Value); if (amlight != null) amlight.Color = amcolor; } }
We can also change the direction of the
Directional lights:
void dispatcherTimer2_Tick(object sender, EventArgs e) { var dir = dirlight.Direction; if (dir.Y > 5 || dir.Y < -5) deltaYdir = -1 * deltaYdir; dir.Y += deltaYdir; dirlight.Direction = new Vector3D(dir.X, dir.Y, dir.Z); } void dispatcherTimer_Tick(object sender, EventArgs e) { var dir = dirlight.Direction; if (dir.X > 5 || dir.X<-5) deltaXdir = -1 * deltaXdir; dir.X += deltaXdir; dirlight.Direction = new Vector3D(dir.X, dir.Y, dir.Z); }
Changing the lights' color and direction will cause the object to be viewed with different colors and shades. See Figure 2: Lighting a cube.
The other
ModelVisual3D.Content includes the
Model3DGroup which contains the
GeometryModel3D.Geometry and
GeometryModel3D.Geometry specifies the Mesh details:
TextureCoordinates, and
TriangleIndices. The
GeometryModel3D.Material specifes the
Brush for rendering the objects. The original object is a cube, and the brush, a simple gradient map.
<GeometryModel3D.Geometry> <MeshGeometry3D x:Name="theGeometry" Positions="-0.05,-0.1,0 0.05,-0.1,0 -0.05,0,0 0.05,0,0 -0.05,-0.1,-0.1 0.05,-0.1,-0.1 -0.05,0,-0.1 0.05,0,-0.1" TextureCoordinates="0,1 1,1 0,0 1,0 0,0 1,0 0,1 1,1" TriangleIndices="0,1,2 1,3,2 0,2,4 2,6,4 2,3,6 3,7,6 3,1,5 3,5,7 0,5,1 0,4,5 6,5,4 6,7,5"/> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <MaterialGroup> <DiffuseMaterial x:Name="theMaterial"> <DiffuseMaterial.Brush> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="AliceBlue" Offset="0" /> <GradientStop Color="DarkBlue" Offset="1" /> </LinearGradientBrush> </DiffuseMaterial.Brush> </DiffuseMaterial> </MaterialGroup> </GeometryModel3D.Material>
To change the position of the mesh, we perform translations on its vertices
private void UpdateMesh(float offsetx,float offsety,float offsetz) { var vertices = orgmeshpos; for (int i = 0; i < vertices.Count; i++) { var vert = vertices[i]; vert.Z += offsetz; vert.Y += offsety; vert.X += offsetx; this.theGeometry.Positions[i] = new Point3D(vert.X, vert.Y, vert.Z); } }
We load in the startup positions (stored in
orgmeshpos) and then apply the translations which we have altered via the X, Y and Z sliders. See Figure 3: View changes with Mesh Translation.
User Interface
At startup, the UI is as shown in Figure 5.
Figure 5: Startup
This is the front view of the startup cube. You can slide on the
Camera Rotational sliders located at the left, right and bottom to get a different view of the cube.
Right click on the cube to toggle it between a
face cube and a
gradient color cube.
Figure 6: Face cube
Figure 6 shows the
face cube rendered by an
ImageBrush. You can use the
Translation setting sliders to change the position of the cube. Changing the values of the
Camera Rotation sliders will cause the cube to be viewed at different angles. The
ambient light shade and
directional color setting effect a change in color and intensity of the lights. This will causes the object to appear lighted up differently. The direction of the direction lights can be changed by clicking on the buttons captioned
<-> and
^--v. The direction of the directional lights will change continously, causing different shades and shadows on the object. Clicking on these buttons again locks the direction of the lights at that time. Right click these buttons to reset the direction of the lights.
Figure 7: Face Model
There are 6
face models to choose from. Click on any one of the 6 face images on the right. The selected
face model would be loaded at the
default position, but with the current
camera rotation settings. To get to all
default positions and
camera rotation settings, click on the
Reset button, or double click on the rendered
face model.
To take a snapshot of current view of the model, click on the
Snap button. A snapshot would be recorded, stored in memory, and displayed within the vertical column on the left. The column displays the last 6 snapped images. To scroll for other images, move the mouse over any of the images and roll the mouse wheel.
Click on the image to view/save it to file.
When the
face model is loaded, the texture file for the model would be displayed at the left top corner. Click on the
texture image to select and load a new face file.
Figure 8: Face Fitting
When a face image is selected and loaded, the program would attempt to locate the eyes. Eye detection is done using
OpenCV HaarClassifier. Note at the center of active
face feature locator (the red circle), there is a small box. This is for pin point location of the feature point. Also on the top left, there would be a
magnifier showing the content inside the active
face feature locator.
The 5 points to locate are
2 eyes, nose base, upper lip base and chin. To finely move the
locator, click to select it, then use the arrow keys and at the same time, view the content at the center of the magnifier, to precisely locate the face point.
Check the
Aligned Eye checkbox if the input face image's eyes are not quite level. Note that, most people are not able to keep their eyes absolutely level in a frontal photo.
Click on
Best Fit button to get the
face model that best fits the new face. Click
Update to use the currently selected
face model.
Figure 9: Face Fitting Evaluation
After you have chosen and updated the
face model with the new face, take note of the following:
- Top right image: Stretched face to be used as texture
- Bottom right: The aligned fitting of the stretched face to the face model
- Fitting Error: Shows 4 numbers <eye-nose>:<nose-mouth>:<mouse-chin>:<over-all>
For good fitting, the stretched face should not be too deformed. See the figure labeled Bad Fit earlier in the article for an example of a badly fitted face image.
Fitting Error would help you to re-adjust the face points. Take for instance, the value -10:15:-10:80. In this case the
error=-10, the
erorr=-10 and
overall error calculated with the assigned weightage 4 for
eye-nose, 2 for
nose-mouth and 1 for
mouth-chin, would be 80.
To compensate for negative
eye-nose error, bring the 2 eyes
locators closer together and and/or lower the
nose locator. Like wise, to compensate for a positive
eye-nose error, move the
eyes locators further apart and/or bring the
nose locator higher.
To compensate for negative
nose-mouth error, move the
mouth and nose locators further apart. For positive
locators closer to one another.
To compensate for negative
mouth-chin error, move the mouth and chin locators further apart. For positive error, bring these
locators closer to one another.
In our example for the value -10:15:-10:80, we move the
eye locators closer, the
nose locator down to compensatie for -10
eye-nose error. For the
nose-mouth error correction of 15, bring the
mouth locator up. And for the
mouth-chin error of -10, bring the the
chin locator further down.
Note that the relocation of the
face points locators to compensate for the fitting error will result in a stretched face image with proportion more similar to the original image, but if there are too much corrections, some face points may not aligned with corresponding face points on the face model. Click
Update button and then check the alighment-fitting image at the bottom right.
This is an iterative process and may take some practise to be proficient. However some face images may just not be satisfactorily fitted at all if their face points configurations are significantly out of proportion compared to any of our 6 face models. Most faces that I have tried fitting can somehow be fitted to a maximum
overall error of 100.
After face fitting, you can perform translations and camera rotations to get the desired view. Then click the
Snap button to take a snapshot.
To remove the
grid lines on the face, uncheck the
ShowGrid checkbox on the top right.
Sometimes, the face image cannot totally covers the face model, especially around the edges of the face.
Figure 10: Face texture insufficent
Figure 10 shows that we are not able to render the side of the face effectively as there are insufficent face texture. The edge of the face is distorted as it is using part of the the ear and hair for rendering. To handle such cases, I have devised a method to patch the side of the new face with face texture nearer to the cheek and side of the eyes. Uncheck the
No-Stretching checkbox on the top left to enable this feature.
Figure 11: Patched Face
Figure 11 shows that the side of the face has been patched by texture extended from the inner part of the face.
Code Highlights
OpenCV: Finding Face and Eyes in C# without Emgucv. Orginally I wanted to use
Emgucv, but the footprint is just too large, and is not ideal for distribution in this article. The code here uses a wrapper for
Opencv 2.2. The code for the wrapper is in
DetectFace.cs. The code below makes use of methods in this warpper to do
face and eye detection. The wrapper codes are modified from
detectface.cs from https://gist.github.com/zrxq/1115520/fc3bbdb8589eba5fc243fb42a1964e8697c70319
public static void FindFaceAndEyes(BitmapSource srcimage, out System.Drawing.Rectangle facerect, out System.Drawing.Rectangle[] eyesrect) { String faceFileName = AppDomain.CurrentDomain.BaseDirectory + "haarcascade_frontalface_alt2.xml"; String eyeFileName = AppDomain.CurrentDomain.BaseDirectory + "haarcascade_eye.xml"; IntelImage _img = CDetectFace.CreateIntelImageFromBitmapSource(srcimage); using (HaarClassifier haarface = new HaarClassifier(faceFileName)) using (HaarClassifier haareye = new HaarClassifier(eyeFileName)) { var faces = haarface.DetectObjects(_img.IplImage()); if(faces.Count>0) { var face = faces.ElementAt(0); facerect = new System.Drawing.Rectangle(face.x, face.y, face.width, face.height); int x=face.x,y=face.y,h0=face.height ,w0=face.width; System.Drawing.Rectangle temprect = new System.Drawing.Rectangle(x,y,w0,5*h0/8); System.Drawing.Bitmap bm_current=CDetectFace.ToBitmap(_img.IplImageStruc(),false) ; System.Drawing.Bitmap bm_eyes = bm_current.cropAtRect(temprect); bm_eyes.Save(AppDomain.CurrentDomain.BaseDirectory + "temp\\~eye.bmp", System.Drawing.Imaging.ImageFormat.Bmp); IntelImage image_eyes = CDetectFace.CreateIntelImageFromBitmap(bm_eyes); IntPtr p_eq_img_eyes= CDetectFace.HistEqualize(image_eyes); var eyes = haareye.DetectObjects(p_eq_img_eyes); NativeMethods.cvReleaseImage(ref p_eq_img_eyes); image_eyes.Dispose(); image_eyes = null; bm_eyes.Dispose(); if (eyes.Count > 0) { eyesrect = new System.Drawing.Rectangle[eyes.Count]; for (int i = 0; i < eyesrect.Length; i++) { var eye = eyes.ElementAt(i); eyesrect[i] = new System.Drawing.Rectangle(eye.x, eye.y, eye.width, eye.height); } } else eyesrect = null; } else { facerect = System.Drawing.Rectangle.Empty; eyesrect = null; } } _img.Dispose(); }
WPF and GDI+conversion. The
WPF System.Wiindows.Media classes are ideal for presentation, but they are not so flexible when it comes to image manipulation. Drawing on
System.Winows.Drawing.Bitmap is easier than drawing on
System.Windows.Media.ImageSource. Thus for bitmap manipulation, I convert
BitmapSource to
System.Windows.Drawing.Bitmap and for presentation on WPF, I convert backwards from
System.Windows.Drawing.Bitmap to
public static System.Windows.Media.Imaging.BitmapImage Bitmap2BitmapImage(System.Drawing.Bitmap bitmap) { System.Drawing.Image img = new System.Drawing.Bitmap(bitmap); ((System.Drawing.Bitmap)img).SetResolution(96, 96); MemoryStream ms = new MemoryStream(); img.Save(ms, System.Drawing.Imaging.ImageFormat.Png ); img.Dispose(); img=null; ms.Seek(0, SeekOrigin.Begin); BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.StreamSource = ms; bi.EndInit(); bi.Freeze(); return bi; } public static System.Drawing.Bitmap BitmapImage2Bitmap(BitmapSource bitmapImage) { using (MemoryStream outStream = new MemoryStream()) { BitmapEncoder enc = new PngBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(bitmapImage)); enc.Save(outStream); System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream); bitmap.SetResolution(96, 96); System.Drawing.Bitmap bm=new System.Drawing.Bitmap(bitmap); tempbm.Dispose(); tempbm=null; return bm; } }
Snapping from viewport. The
RenderTargetBitmap class is useful for grabbing an image from
Viewport3D. However the entire viewport is grabbed. Nonetheless, we can get the object, as most of the viewport snapped will have transparent pixels. A bounding rectange for non transparent pixel can be found, the bound adjusted to get some margin, and we do a crop from the grabbed
RenderTargetBitmap using the
CropBitmap class. We then use the
FormatConvertedBitmap class to convert the final image to
RGB24 format which is the standard used for most image processing software, including our
Opencv wrapper.
var viewport = this.viewport3d; var renderTargetBitmap = new RenderTargetBitmap((int)(((int)viewport.ActualWidth+3)/4 *4) , (int)viewport.ActualHeight , 96, 96, PixelFormats.Pbgra32); renderTargetBitmap.Render(viewport); byte[] b=new byte[(int)renderTargetBitmap.Height*(int)renderTargetBitmap.Width*4]; int stride=((int)renderTargetBitmap.Width )*4; renderTargetBitmap.CopyPixels(b, stride, 0); int x = 0, y = 0,minx=99999,maxx=0,miny=99999,maxy=0; for(int i=0;i<b.Length;i=i+4) { y = i /stride; x = (i % stride) / 4; if (b[i + 3] == 0) { b[i] = 255; b[i + 1] = 255; b[i + 2] = 255; } else { if (x > maxx) maxx = x; if (x < minx) minx = x; if (y > maxy) maxy = y; if (y < miny) miny = y; } } BitmapSource image = BitmapSource.Create( (int)renderTargetBitmap.Width , (int)renderTargetBitmap.Height, 96, 96, PixelFormats.Bgra32, null, b, stride); int cropx = minx - 20; if (cropx < 0) cropx = 0; int cropy = miny - 20; if (cropy < 0) cropy = 0; int cropwidth = (((maxx - cropx + 20 + 1) + 3) / 4) * 4; int cropheight = maxy - cropy + 20 + 1; int excessx = cropwidth + cropx - image.PixelWidth; int excessy = cropheight + cropy - image.PixelHeight; if (excessx < 0) excessx = 0; if (excessy < 0) excessy = 0; excessx = ((excessx + 3) / 4) * 4; CroppedBitmap crop; try { crop = new CroppedBitmap(image, new Int32Rect(cropx, cropy, cropwidth - excessx, cropheight - excessy)); } catch { return; } var destbmp = new FormatConvertedBitmap(); destbmp.BeginInit(); destbmp.DestinationFormat = PixelFormats.Rgb24; destbmp.Source = crop; destbmp.EndInit();
Save Image and Background.
Window2 implements a generic window to display and save images. It consists of a
Grid (TopGrid) containing an
Image (Image1). The code retrieves the i
mage source of
TopGrid background and draws the
image source from
Image1 onto it. For such overlaying, both the
background image and the
foreground image must support
int imagewidth = (int)Image1.Source.Width; int imageheight = (int)Image1.Source.Height ; System.Drawing.Bitmap bm=null; if (SourceBrushImage == null) bm = new System.Drawing.Bitmap(imagewidth, imageheight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); else { ImageBrush ib=(ImageBrush)(TopGrid.Background) ; BitmapSource ibimgsrc = ib.ImageSource as BitmapSource; bm = CCommon.BitmapImage2Bitmap(ibimgsrc); } System.Drawing.Graphics gbm = System.Drawing.Graphics.FromImage(bm); if (SourceBrushImage == null) gbm.Clear(System.Drawing.Color.AliceBlue); System.Drawing.Bitmap bm2 = CCommon.BitmapImage2Bitmap(Image1.Source as BitmapSource ); gbm.DrawImage(bm2, 0, 0); gbm.Dispose(); bm.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg);
AForge Brightness and Contrast. When we adjust the brightness or/and contrast, we retrieve the orginal
unfiltered (ie not operated with any image
filters) and apply the
brightness and contrast filters on the original image, in order,
brightness first and then using the resulting image we set the
contrast filter.
if (((System.Windows.Controls.Slider)sender).Name == "sliderBrightness" || ((System.Windows.Controls.Slider)sender).Name == "sliderContrast") { if (colorbitmap == null) return; System.Drawing.Bitmap bm = CCommon.BitmapImage2Bitmap((BitmapImage)colorbitmap); AForge.Imaging.Filters.BrightnessCorrection filterB = new AForge.Imaging.Filters.BrightnessCorrection(); AForge.Imaging.Filters.ContrastCorrection filterC = new AForge.Imaging.Filters.ContrastCorrection(); filterB.AdjustValue = (int)sliderBrightness.Value; filterC.Factor = (int)sliderContrast.Value; bm = filterB.Apply(bm); bm = filterC.Apply(bm); BitmapImage bitmapimage = CCommon.Bitmap2BitmapImage(bm); theMaterial.Brush = new ImageBrush(bitmapimage) { ViewportUnits = BrushMappingMode.Absolute }; }
Getting the Best Fitting Face Model. The algo for
Face Fitting has been covered earlier. Here we work through the
ratios, without actually performing the image manipulation for the new face, to find the
fitting error and then pick the
face model with the least error.
public string getBestFittingMesh(string filename) { FeaturePointType righteyeNew = new FeaturePointType(); FeaturePointType lefteyeNew = new FeaturePointType(); FeaturePointType noseNew = new FeaturePointType(); FeaturePointType mouthNew = new FeaturePointType(); FeaturePointType chinNew = new FeaturePointType(); for (int i = 0; i < _imagefacepoints.Count; i++) { FeaturePointType fp = new FeaturePointType(); fp.desp = _imagefacepoints[i].desp; fp.pt = _imagefacepoints[i].pt; switch (fp.desp) { case "RightEye1": righteyeNew = fp; break; case "LeftEye1": lefteyeNew = fp; break; case "Nose1": noseNew = fp; break; case "Mouth3": mouthNew = fp; break; case "Chin1": chinNew = fp; break; } } if (_degPreRotate != 0) { righteyeNew = rotateFeaturePoint(righteyeNew, _degPreRotate); lefteyeNew = rotateFeaturePoint(lefteyeNew, _degPreRotate); noseNew = rotateFeaturePoint(noseNew, _degPreRotate); mouthNew = rotateFeaturePoint(mouthNew, _degPreRotate); chinNew = rotateFeaturePoint(chinNew, _degPreRotate); } int eyedistNew = (int)(lefteyeNew.pt.X - righteyeNew.pt.X); FeaturePointType righteyeRef = new FeaturePointType(); FeaturePointType lefteyeRef = new FeaturePointType(); FeaturePointType noseRef = new FeaturePointType(); FeaturePointType mouthRef = new FeaturePointType(); FeaturePointType chinRef = new FeaturePointType(); string[] meshinfofiles = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "mesh\\","*.info.txt"); List<Tuple<string,string, double>> listerr = new List<Tuple<string,string, double>>(); foreach(var infofilename in meshinfofiles) { using (var file = File.OpenText(infofilename)) { string s = file.ReadToEnd(); var lines = s.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < lines.Length; i++) { var parts = lines[i].Split('='); FeaturePointType fp = new FeaturePointType(); fp.desp = parts[0]; fp.pt = ExtractPoint(parts[1]); switch (fp.desp) { case "RightEye1": righteyeRef = fp; break; case "LeftEye1": lefteyeRef = fp; break; case "Nose1": noseRef = fp; break; case "Mouth3": mouthRef = fp; break; case "Chin1": chinRef = fp; break; } } } double x0Ref = (lefteyeRef.pt.X + righteyeRef.pt.X) / 2; double y0Ref = (lefteyeRef.pt.Y + righteyeRef.pt.Y) / 2; double x0New = (lefteyeNew.pt.X + righteyeNew.pt.X) / 2; double y0New = (lefteyeNew.pt.Y + righteyeNew.pt.Y) / 2; int eyedistRef = (int)(lefteyeRef.pt.X - righteyeRef.pt.X); double noselengthNew = Math.Sqrt((noseNew.pt.X - x0New) * (noseNew.pt.X - x0New) + (noseNew.pt.Y - y0New) * (noseNew.pt.Y - y0New)); double noselengthRef = Math.Sqrt((noseRef.pt.X - x0Ref) * (noseRef.pt.X - x0Ref) + (noseRef.pt.Y - y0Ref) * (noseRef.pt.Y - y0Ref)); double ratiox = (double)eyedistRef / (double)eyedistNew; double ratioy = noselengthRef / noselengthNew; double errFitting = (ratiox - ratioy) / ratiox; Point newptNose = new Point(noseNew.pt.X * ratiox, noseNew.pt.Y * ratioy); Point newptMouth = new Point(mouthNew.pt.X * ratiox, mouthNew.pt.Y * ratioy); double mouthDistRef = mouthRef.pt.Y - noseRef.pt.Y; double mouthDistNew = newptMouth.Y - newptNose.Y; double ratioy2 = mouthDistRef / mouthDistNew; double errFitting1 = (1 - ratioy2); Point newptChin = new Point(chinNew.pt.X * ratiox, chinNew.pt.Y * ratioy); double chinDistRef = chinRef.pt.Y - mouthRef.pt.Y; double chinDistNew = newptChin.Y - newptMouth.Y; double ratioy3 = chinDistRef / chinDistNew; double errFitting2 = (1 - ratioy3); double score = Math.Abs(errFitting)*4+ Math.Abs(errFitting1)*2+ Math.Abs(errFitting2); string fittingerr = (int)(errFitting*100)+":"+ (int)(errFitting1*100) +":"+ (int)(errFitting2*100); Tuple<string,string,double> tp=new Tuple<string,string,double> (infofilename,fittingerr,score); listerr.Add(tp); } var sortedlist = listerr.OrderBy(o => o.Item3).ToList(); string selected=sortedlist[0].Item1; var v=selected.Split('\\'); var v2 = v[v.Length - 1].Split('.'); string meshname = v2[0].Replace("mesh",""); return meshname ; }
Magnifier implementation using WritableBitmap. This is a simple but very useful implementation of a
Magnifier. The idea is that WPF image with
Auto width and height will stretch when the container (
Grid/Window) is resized. In the xaml file, we define the window size as 50X50 for
<Window x:Class="ThreeDFaces.Window3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="50" Width="50" WindowStyle="None" PreviewMouseLeftButtonDown="Window_PreviewMouseLeftButtonDown" PreviewMouseMove="Window_PreviewMouseMove" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged"> <Grid Name="MainGrid"> <Image Name="Image1" HorizontalAlignment="Left" Height="Auto" VerticalAlignment="Top" Width="Auto"/> </Grid> </Window>
winMagnifier is a reference to
Window3. When we first create a new
Window3, we initialize the
image source of
Image1 in
winMagnifier to a
WritetableBitmap (50X50 in size).
_wbitmap = new WriteableBitmap(50, 50, 96, 96, PixelFormats.Bgra32, null); winMagnifier = new Window3(); winMagnifier.Image1.Source = _wbitmap; UpdateMagnifier(0, 0); winMagnifier.Owner = this; winMagnifier.Show();
When the window is loaded, we resize it to 150X150, thus the image would look like it is being magnified 3X. We have to also ensure to keep the aspect ratio so that the window is not stretched unevenly. We implement a timer that checks that the window width will equal the window height when the window is resized.
private void Window_Loaded(object sender, RoutedEventArgs e) { this.Width = 150; this.Height = 150; _resizeTimer.Tick += _resizeTimer_Tick; } void _resizeTimer_Tick(object sender, EventArgs e) { _resizeTimer.IsEnabled = false; if (bHeightChanged) this.Width = this.Height; else this.Height = this.Width; } private void Window_SizeChanged(object sender, SizeChangedEventArgs e) { Size oldsize = e.PreviousSize; Size newsize = e.NewSize; bHeightChanged = ((int)oldsize.Height) == ((int)newsize.Height) ? false : true; _resizeTimer.IsEnabled = true; _resizeTimer.Stop(); _resizeTimer.Start(); }
In the calling procedure, we have a method that updates the
WritetableBitmap which is the source for the
Image1 in
winMagnifier. In this way the content of
winMagnifier changes each time we call
private void UpdateMagnifier(int x, int y) { try { BitmapImage bmi = Image1.Source as BitmapImage; int byteperpixel=(bmi.Format.BitsPerPixel + 7) / 8; int stride = bmi.PixelWidth * byteperpixel; byte[] _buffer = new byte[50 * stride]; bmi.CopyPixels(new Int32Rect(x, y, 50, 50), _buffer, stride, 0); for (int i = 0; i < 50;i++ ) for (int k = 0; k < 2;k++ ) _buffer[24 * stride + i * byteperpixel+k] = 255; for (int j = 0; j < 50;j++ ) for (int k = 0; k < 2; k++) { _buffer[j * stride + 24 * byteperpixel + k] = 255; } _wbitmap.WritePixels(new Int32Rect(0, 0, 50, 50), _buffer, stride, 0); } catch { } }
For Crime Investigation: Getting the side profile from a previous frontal to match a side view of another image of the same person.
William Shakespear Mask fitting with all our 6 face models:
Just for Fun with shades, colors and orientation:
Faces with open mouth showing teeth do not show well on side view. It would seem that the teeth are protruding from the mouth.
Faces with eyes significantly not level does not work well.
I have include some images in the
\Images directory for testing. The source for these pictures are:
From Version 2.0 onwards, you can process images with
multiple faces.
When an image with multiple faces is loaded, a
face selection window will pop up with all
detected faces marked within
red rectangles. Select a face by double-clicking in the rectangle. The
face selection window will be minimized and the selected face will appear in the
face fitting window. If you minimize the
face selection window without making any selection, the first face detected will be automatically selected. If you close the
face selection window, the entire multiple faces image will appear in the
face fitting window.
If you want to select another face from the
multple faces image, just restore the
face selection window from the task-bar and make another selection, you do not have to reload the
multiple faces image from file.
I have also included a test file with many faces in the \GroupImages directory.
In Version 2.2, you can create
animated gif files for the model with the camera rotating left and right about the y axis.
The encoder for the animated gif is from the Code Project article: NGif, Animated GIF Encoder for .NET.
In Version 2.3, you can do
Face Left/Right Mapping. Right click on the face model in the viewport and a context menu will appear for you to select 1) Map Left, 2) Map Right or 3) No Map.
If you select
Map Left, the Left Face (ie the side of the face that appear on the right side of your screen) will be replaced with the Right Face. Likewise, Map Right replaces the Right Face with the Left Face. See the Figure below:
For the face mapping to be done correctly, the stretched face should be aligned such that the eyes are level and the nose base is aligned with the nose-base marker on the face-mesh superimposed image. See Figure below:
For fine adjustments, you can move the eyes and nose markers in the
Face Fitting window incrementally and observe the changes in the face-mesh superimposed image and the face model.
I have included face point info files in the /temp directory for all face images from /Images directory. You can test the above image from /Images/ronald-reagan.jpg. Once the file is loaded, the face points would be marked, you can then click the
Best Fit button to update the face model and then right click on it to select the
Face Mapping that you want.
In Version 3.0, you can add and edit face meshes based on any of the 6 base face models.
This is useful when you do not have a frontal face image to work with. Refer to the above face image from \NonFrontalImages\S075-01-t10_01.jpg. It is showing much more of the left side than the right side of the face.
I have created a new face model based on Oval Face to work with this image. For this case, I have created
OvalFace1. You can access this face model from the face models grid column on the right. Place the mouse over the grid column, turn the mouse wheel to scroll down to the additional face model(s) created, then select and load
OvalFace1. Subsequently select and load \NonFrontalImages\S075-01-t10_01.jpg. Click Update to apply the face image on
OvalFace1 face model. Then right click on the face model and select
To create your own face model:
1) Load any of the 6 base face models from the face model grid column on the right
2) After the face model is loaded, right click on the face mesh at bottom right
To edit or delete any of the new face models created, scroll to the new face model and right clck on it. A context menu would pop up to allow you to edit/delete the face model.
To edit the face model, use any of the four sliders located at the four edges of the
face model edit window to rotate and stretch the face model.
26 June 2017: Version 3.0
New Feature: Enable the creation of additional face models
Bug Fixes: Default the system culture to "en-us" so that the mesh file's decimal seperator "." would be recognized
28 May 2017: Version 2.3
New Feature: Face Left/Right Mapping. Include face points info files in /temp directory.
7 May 2017: Version 2.2
New Feature: Creation of animated gif
Bug Fixes: Fix inconsistent WPF controls refresh/update
5 May 2017: Version 2.1
New Feature: Caching of multiple faces, more accurate eye detection for multiple faces images
Bug Fixes: Disposing of GDI+ Bitmaps after use to clear memory
2 May 2017: Version 2.0
New Feature: Processing of Multiple faces image file
30 April 2017: Version 1.2A
New Features:
- Caching of facial points for face files
- More accurate eye detection
- Auto crop of face for better display on fitting window
28 April 2017: Version 1.2
For the article:
- Proof reading and fixing typo errors
- Include more information on correction to fitting error
27 April 2017: Version 1.2
Bug Fixes:
- Added a thrid parameter for cvSaveImage function in the OpenCV wrapper to match orginal specification in the OpenCV .h file
- Improve eye detection by fixing the implementaion for Histogram Equalization
26 April 2017: Version 1.1
Bug Fixes:
- Include validation on input face points and selected face file.
- Allows 8 bit image files
24 April 2017: Version 1.0
First Release


text:
Revising the Declaration of HelsinkiBMJ 2013; 346 doi: https://doi.org/10.1136/bmj.f2837 (Published 08 May 2013) Cite this as: BMJ 2013;346:f2837
- Vivienne Nathanson, director of professional activities
- 1BMA, London WC1H 9JP, UK,
- VNathanson{at}bma.org.uk
In the middle of the 20th century, the Nuremberg trials laid bare the abuse of medical knowledge and techniques used in human experimentation, with perhaps the most famous offender being Joseph Mengele. The outcomes of the trials included the Nuremberg Code—a legal document intended to stop such abuses—and the establishment of the World Medical Association (WMA). Both were intended to ensure that doctors never again performed such inhuman experiments.
Over the next two decades the newly formed WMA began to put together a core set of policies, designed to reflect ethical thinking, to which doctors were expected to conform. The Declaration of Helsinki, published in 1964,1 set out rules and limits for human experimentation based on the findings of the Nuremberg trials and an unshakeable conviction that human experimental subjects have fundamental rights that drive a series of duties for the experimenter. Key to its development and adoption was that it was essentially written by doctors for doctors.
Since then, the declaration has been incorporated into national laws in several countries and has been a touchstone for researchers. It has not remained static; changes have been made on eight occasions. Another revision is now under way, and a draft document is currently open …


text: As a kid I loved Hannah Montana aka Miley Cyrus, I grew up watching her every tv show and I still loved her very much. This summer, I had planned to have a singing group with my friends from my neighborhood but one of them moved away, so we are left with only 2 of us here. Unfortunately, mummy wouldn't get us the wireless microphone headset like the ones I saw on one of Hannah Montana shows because she said those are for professional singers only. So I guess for now we have to sing with only our plastic microphones till we are old enough to get them for ourselves.


text:
This Pilates equipment class includes the MVe chair by Peak Pilates. It includes innovative moves to incorporate your equipment workout. MVe chairs are excellent for all fitness levels and work all areas of the body.
Check out www.fitnessblender.com for free at home workouts, healthy recipes, and more! This beginner version of the Pilates Leg Pull calls upon your core muscles and also incorporates the glute and hamstring muscles with the leg lifts. To get a toned core with this Pilates exercise, be sure to keep your pelvis and torso stabilized throughout the motion; don't let them tilt or twist. This exercise utilizes multiple muscles, from the shoulders to the knee joints, providing total body toning without a single piece of equipment. This exercise naturally has a very small range of motion; don't force range of motion with jerky or bouncy movements. Once this exercise is easy, move up to the Pilates Leg Pull Level 2.
Video Rating: 0 / 5