My Blog List

Wednesday, 22 August 2012

Face Detection in Android




Hi, fellas
Today i am gonna show you how you can detect face in given bitmap .Android Provides some classes and its associate constructor and method through which you can easily detect a face even eye position in given bitmap .So first take a look on below class description from http://developer.android.com/reference/android/media/FaceDetector.html#FaceDetector(int, int, int)


1.FaceDetector

extends Object
java.lang.Object
   ↳android.media.FaceDetector

Class Overview


Identifies the faces of people in a Bitmap graphic object.


2.

Public Constructors


public FaceDetector (int width, int height, int maxFaces)

Since: API Level 1
Creates a FaceDetector, configured with the size of the images to be analysed and the maximum number of faces that can be detected. These parameters cannot be changed once the object is constructed. Note that the width of the image must be even.
Parameters
widththe width of the image
heightthe height of the image
maxFacesthe maximum number of faces to identify
3.

Public Methods


public int findFaces (Bitmap bitmap, Face[] faces)

Since: API Level 1
Finds all the faces found in a given Bitmap. The supplied array is populated with FaceDetector.Faces for each face found. The bitmap must be in 565 format (for now).
Parameters
bitmapthe Bitmap graphic to be analyzed
facesan array in which to place all found FaceDetector.Faces. The array must be sized equal to the maxFaces value set at initialization
Returns
  • the number of faces found
Here we go....
1.Create your Project ,name it as FaceDetectionDemo
2.Create FaceDetectionActivity
In your onCreate method write setContentView(new MyView(this)); after call to super.
public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
       setContentView(new MyView(this));
}
3.So next step is to create MyView class

private class MyView extends View
    {
    private Bitmap myBitmap;
    private int width, height;
    private FaceDetector.Face[] detectedFaces;
    private int NUMBER_OF_FACES=2;
    private FaceDetector faceDetector;
    private int NUMBER_OF_FACE_DETECTED;
    private float eyeDistance;
    
public MyView(Context context) 
{
super(context);
BitmapFactory.Options bitmapFatoryOptions=new BitmapFactory.Options();
bitmapFatoryOptions.inPreferredConfig=Bitmap.Config.RGB_565;
myBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.fourface,bitmapFatoryOptions);
width=myBitmap.getWidth();
height=myBitmap.getHeight();
detectedFaces=new FaceDetector.Face[NUMBER_OF_FACES];
faceDetector=new FaceDetector(width,height,NUMBER_OF_FACES);
NUMBER_OF_FACE_DETECTED=faceDetector.findFaces(myBitmap, detectedFaces);
}
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawBitmap(myBitmap, 0,0, null);
Paint myPaint = new Paint();
            myPaint.setColor(Color.GREEN);
            myPaint.setStyle(Paint.Style.STROKE); 
            myPaint.setStrokeWidth(3);

            for(int count=0;count<NUMBER_OF_FACE_DETECTED;count++)
            {
            Face face=detectedFaces[count];
            PointF midPoint=new PointF();
            face.getMidPoint(midPoint);
            
            eyeDistance=face.eyesDistance();
            canvas.drawRect(midPoint.x-eyeDistance, midPoint.y-eyeDistance, midPoint.x+eyeDistance, midPoint.y+eyeDistance, myPaint);
            }
}
    
    }
Let me Explain the Constructor


  • For FaceDetection we need to convert in bitmap format that too in RGB_565.
  • Now get the image from the drawable folder. Get the width and height of image.
  • Now the reason I feel this API the simplest is coming now.
  • You need to pass the number of faces you want to detect.It will return the array of Face type.Last three lines is having logic for that.So you must declare an array with the size of number of faces you want to detect.
Now when the face gets detected we will draw a red rectangle on it.For that we need to write few lines in our onDraw method.
  • drawRect is taking five parameter left x,y and top x,y coordinate.From that given pint it will start drawing rectangle.We need to pass paint object also.



That's all run your project and it will detect faces and drawRect on given bitmap
enjoy!
for more query plz mail me @bpsingh216@gmail.com

How to get Installed packages List in Android

Hi, folks
This quick post is related to grab the app information installed on to your device.

Here is sample method  on button clicked..


 public void getInstalledPackage(View view)
{
Log.d("Clicked", " button Clicked");
             PackageManager pm = getPackageManager();
//get a list of installed apps.
        List<ApplicationInfo> packages = pm
                .getInstalledApplications(PackageManager.GET_META_DATA);
                // iterate over the list.
        for (ApplicationInfo packageInfo : packages) {
                           // print package name.
            Log.d("package name" , packageInfo.packageName);

        }
      }
that's all  
open your log cat and you can see the result
pretty cool  is'nt?


for any query just mail me @ bpsingh216@gmail.com

Friday, 20 July 2012

iPhone Basic UI Controls Demo

Hello fellas,

Here this post comes with some basic iphone UI controls demo. It will illustrate how to deal with
                         UILable
                         UITextField
                         UITextView
                         UIImageView
                         UIButton
                         UISteper
                         UISlider
                         UISwitch
so let's start
1. Open Xcode create new project
  Xcode ->>File->>New->>New Project
create new View Controller name it as BasicControlsVC
Xcode will automatically create
.AppDelegate.h
.AppDelegate.m
.BasicControlsVC.h
BasiccontrolsVC.m

2.Open BasicControls.h and declare your controls (see below)


#import <UIKit/UIKit.h>

@interface BasicControlsVC : UIViewController<UITextFieldDelegate,UITextViewDelegate>
{
    
    
    UIButton *button;
    UILabel *lable;
    UITextView *textview;
    UITextField *textfield;
    UISlider *slider;
    UISwitch *switchControls;
    UIStepper *stepper;
    UIImageView *imageview;
    
}

@end


3.Now Time to create these controls and performing action.
Generally creating controls refers to allocating memory and setting it's property ,so let's do that
open BasicControlsVC.m and modify your init method  as shown below

- (id)init
{
    self = [super init];
    if (self) {
        //allocate controls here..
        
        //create lable
        lable=[[UILabel alloc]init];
        [lable setFrame:CGRectMake(50, 50, 100, 30)];
        lable.text=@"This is label";
        lable.textColor=[UIColor grayColor];
        
        //create Image view
        imageview=[[UIImageView alloc]initWithFrame:CGRectMake(170, 50, 100, 80)];
        imageview.image=[UIImage imageNamed:@"lamborghini.png"];
        
        
        //create  Textfield
        textfield=[[UITextField alloc]initWithFrame:CGRectMake(50, 100, 200, 50)];
        [textfield setPlaceholder:@"this is text field"];
        textfield.delegate=self;
        
        
        //create Textview
        textview=[[UITextView alloc]initWithFrame:CGRectMake(50, 160, 200, 50)];
        [textview setText:@"This is text view"];
        textview.delegate=self;
        
        //create button
        button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [button addTarget:self 
                   action:@selector(aMethod)
         forControlEvents:UIControlEventTouchUpInside];
        [button setTitle:@"Button" forState:UIControlStateNormal];
        [button setTintColor:[UIColor grayColor]];
        [button setTag:1];
        button.frame = CGRectMake(50, 220, 70, 30);
        
        
        
        //create slider
       
        slider = [[UISlider alloc] initWithFrame:CGRectMake(50, 300, 200, 10)];
        [slider addTarget:self action:@selector(sliderAction) forControlEvents:UIControlEventValueChanged];
        [slider setBackgroundColor:[UIColor clearColor]];
        slider.minimumValue = 0.0;
        slider.maximumValue = 50.0;
        slider.continuous = YES;
        slider.value = 20.0;
        
        //create switch control
       
        switchControls = [[UISwitch alloc] initWithFrame:CGRectMake(50, 320, 20, 20)];
        [switchControls addTarget: self action: @selector(switchmethod) forControlEvents: UIControlEventValueChanged];
       
        //create Stepper
        stepper =  [[UIStepper alloc]init];
        [stepper setFrame:CGRectMake(50, 350, 155, 25)];
        [stepper setMinimumValue:0];
        
        stepper.maximumValue = 1000;
        stepper.stepValue = 5;
        stepper.wraps = YES;
        stepper.autorepeat = YES;
        stepper.continuous = YES;
        
        
        [stepper addTarget:self action:@selector(someAction:) forControlEvents:UIControlEventValueChanged];
        
  }
    return self;
}

 Above code snippet will create these controls and  set their property 
Add your controls on BasicControlsVC by modifying your loadView method as shown below


-(void)loadView
{
    [super loadView];
    //add view to this view controller
    [self.view addSubview:lable];
    [self.view addSubview:textfield];
    [self.view addSubview:textview];
    [self.view addSubview:button];
    [self.view addSubview:imageview];
    [self.view addSubview:slider];
    [self.view addSubview:switchControls];
    [self.view addSubview:stepper];
    
    
    
}


3. addTarget:self action:@selector
you can add selector method on  contols eg. UIButton to perform an action when button clicks

[button addTarget:self 
                   action:@selector(aMethod)
         forControlEvents:UIControlEventTouchUpInside];


and ofcourse you have to implement  this aMethod

-(void)aMethod
{
    NSLog(@"button clicked");
    lable.text=@"button clicked";
    
}
 like wise here i implemented respective @selector method for UISwitch,UIStepper,UISlider



-(void)sliderAction
{
    NSLog(@"value changed");
    lable.text=@"value changed";
    
   
 }

-(void)switchmethod
{
    if(switchControls.on)
    {
    NSLog(@"ON");
        lable.text=@"ON";
    }else
    {
       NSLog(@"OFF"); 
        lable.text=@"OFF";
    }
}

- (void) someAction:(UIStepper *) stepper {
    NSLog(@"stepper clicked");
    lable.text = [NSString stringWithFormat:@"%.f", stepper.value];
}





4. Implement UITextFieldDelegate and UITextViewDelegate Method 
As you know when you are dealing with TextField or TextView in iPhone , Keyboard automatically appears and by clicking return button it hides.
To achieve this must implement these two method 


- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    
    if([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    }
    
    return YES;
}



5. Now Build and run your Project you'll get something like that


full source code of this BasicUIControlsDemo you can grab from
here  http://www.4shared.com/zip/KeHWh86P/BasicUIControlsDemo.html


feel free to query @:    bpsingh216@gmail.com
enjoy coding :-)


Friday, 13 July 2012

How to download and install .apk from server(not market app) programmatically

Hi folks,
If you are planning to develop android application which is responsible to download .apk file from server(not market app,Enterprise distribution) and then install it on to the device this post will help you
so here is the choice.

1. Download Manager: this can be done using the Download Manager available from 2.3.3 your newely downloaded file goes in Downloads application as shown below,you can install your newly download .apk by clicking on it .


Android system just ask for permission to install  your .apk with the help of Package Installer . This seems that after downloading their is no controls of your application to install it rather than going to downloads and manually install the .apk .I am not explaing the the code for Download Manager coz this post is all about "How to download .apk from server and  install it programatically" :-).
So  here is the 2nd way


2. 
a. First download .apk file using simple http connection and store it on external storage area.


private void downloadapk(){
    try {
        URL url = new URL("http://www.efimoto.com/nilesh/HelloWorldProject.apk");
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);
        urlConnection.connect();

        File sdcard = Environment.getExternalStorageDirectory();
        File file = new File(sdcard, "filename.apk");

        FileOutputStream fileOutput = new FileOutputStream(file);
        InputStream inputStream = urlConnection.getInputStream();

        byte[] buffer = new byte[1024];
        int bufferLength = 0;

        while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
            fileOutput.write(buffer, 0, bufferLength);
        }
        fileOutput.close();
        this.checkUnknownSourceEnability();
        this.initiateInstallation();

    } catch (MalformedURLException e) {
            e.printStackTrace();
    } catch (IOException e) {
            e.printStackTrace();
    }
    }


b. Now instantiate installing process.

 private void installApk(){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        Uri uri = Uri.fromFile(new File("/sdcard/filename.apk"));
        intent.setDataAndType(uri, "application/vnd.android.package-archive");
        startActivity(intent);
    }

c.  Give uses-permission in application menifest file.

 <uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
    <uses-permission android:name="android.permission.INTERNET"/>
d. Ensure that your "Unknown source " check box must enable.




I have been created simple UI for this  having a button when button clicked it downloads apk after that installation process appears . If unknown source is disable you must got "Install blocked"


That's all, you are successfully downloaded and installed your .apk from server.
feel free to query @:    bpsingh216@gmail.com
enjoy coding :-)





Saturday, 30 June 2012

How to solve "Oops, Yelp is overworked right now"


Hi folks,
This short post will help those who are planning to integrate Yelp in their mobile application for local business search ,getting review of customer about particular business  and much more.(for more hit www.yelp.com)
As the very first step of your yelp integration i.e. Signup  you will definitely  get above error if you are not  from the country list which yelp supports or may be if your IP address don't support  .
So to solve this problem i used proxy site (eg.http://ihide.info/).There are lots of free proxy site just google it.


I entered yelp signup url using above  proxy site and  that's it  No more Oops :-)








Thanks
for any query mail @ bpsingh216@gmail.com

Saturday, 23 June 2012

HelloWorld iPhone Application

Hi folks,
Since it has been a long time that you people did not get any post from my side,This is very first post about iPhone app development .
I assume you people are familiar with basic of objective c and cocoa framework and Xcode.
So this post bring you the anatomy of first HelloWorld  application
let's start...

Prerequisites
1. Xcode
2.basic of  objective c and iphone SDK
last and foremost  patience :-)
Here are the following steps you need to build your HelloWorld application
1.Create new XCode Project
  Create your  project going through XCode ->File ->New Project and select  Empty Application .Name the project HelloWorld and click Save as shown in figure





XCode will create two file AppDelegate.h and AppDelegate.m . Difference between .h and .m file is in objective c all declaration goes to  .h file and implementation goes to .m file.
Now What  is AppDelegate  actually?
 When you create your  project, main.m file under  Supporting files is generated by XCode

it looks like

#import <UIKit/UIKit.h>

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}
 as in any C program the execution of Objective -c application starts from main().the main() function starts by creating autorelease pool and ends by releasing it. In between it makes a call to the UiApplicationMain() function. UiApplicationMain() is declared as follows


int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);


The UiApplicationMain() instantiate the application and the application delegate objects. after that,it sets the delegate property of the application object to the application delegate instance.


The Typical application delegate class looks like
#import <UIKit/UIKit.h>

@interface AppDelegate : NSObject <UIApplicationDelegate>
{
    
}
@end

Notice that application delegate class inherits NSObject class and adopts UIApplicationDelegate protocol and implements the UIApplicationDelegate methods.One of the very first  method of UiApplicationDelegate is 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{}

This method is starting point for developer didFinishLaunchinWithOptions is application life cycle method it is called when application will launch (onCreate() in Android )


 Note : NSObject is the super class of all classes available in objective c and Protocol is  here interface 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}



above code simply illustrate that when application will launch  a new window will be allocated by 

self.window = [[[UIWindow allocinitWithFrame:[[UIScreen mainScreenbounds]] autorelease];

and  set its background color to white by  

self.window.backgroundColor = [UIColor whiteColor];

at last make it visible.

2. Create User Interface using code 
 For your application very first object you need is appdelegate class which we have been seen above
now suppose you application has more than one screen so how will you create your screen(View)?
In iphone each screen is   ViewController (in Android Activity).
For this create a simple class which is a subclass of UIViewController going through
right click on AppDelegate.h  >>>newFile  >>Cocoa Touch >> UiViewController subclass >>next.
Name the file  and create it.





 3. Create object of your newly created UIViewController and add it to the main Window.


modify AppDelegate.h file with following piece of code

#import <UIKit/UIKit.h>
#import "HelloWorldViewController.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    HelloWorldViewController *helloWorldVC;
}

@property (strong, nonatomic) UIWindow *window;

@end

modify AppDelegate.m file

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // create viewcontroller object
    helloWorldVC=[[HelloWorldViewController alloc]init];
    
    
   //add it to the window
    [self.window addSubview:helloWorldVC.view];
    [self.window makeKeyAndVisible];
    return YES;
}

what you have done so far is you have created  HelloWorldViewController and added it to main window. now create label in your controller 

4.Create UiLabel and add it to HelloWorldViewController


  •  Open HelloWorldViewController.h file and declare UILabel

#import <UIKit/UIKit.h>

@interface HelloWorldViewController : UIViewController
{
    UILabel *label;
}

@end


  •  Open HelloWorldViewController.m file create label and set it's property

#import "HelloWorldViewController.h"

@implementation HelloWorldViewController

- (id)init
{
    self = [super init];
    if (self) {
        label=[[UILabel alloc]initWithFrame:CGRectMake(100, 250, 200, 30)];
        label.text=@"HelloWorld";
    }
    return self;
}

  •  Add label to ViewController
-(void)loadView
{
    [super loadView];
    [self.view addSubview:label];
}


5. Build and Run
Run your project by clicking run button (top left corner in XCode).





enjoy coding......
Feel free to comment .For any query mail me @ bpsingh216@gmail.com