Validating username fields and showing CAPTCHA
Why not use the built-in PHP e-mail validation?

filter_var($email, FILTER_VALIDATE_EMAIL)


Why do

if (lol())
  return true;
else
  return false;


when you can do

return lol();


Same goes for lol() ? true : false which you do too.

Furthermore the signup_error stuff is ugly. I'd suggest exceptions. At least make signup_error into an array instead, and just add new elements when you get an error. You can join() the array when outputting.

Also, you risk $count not being defined if $stmt fails.