implemented and fixed the issues regarding FaceRecognition service and the front end scripts
git-svn-id: https://svn.apache.org/repos/asf/incubator/photark/trunk@1157030 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/photark-face-recognition/pom.xml b/photark-face-recognition/pom.xml
index 3ce7a75..b1fd596 100644
--- a/photark-face-recognition/pom.xml
+++ b/photark-face-recognition/pom.xml
@@ -123,6 +123,12 @@
<version>1.5.3</version>
</dependency>
+ <dependency>
+ <groupId>com.restfb</groupId>
+ <artifactId>restfb</artifactId>
+ <version>1.6.4</version>
+ </dependency>
+
</dependencies>
<build>
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java
index a41264c..0d76bac 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java
@@ -53,7 +53,7 @@
* @throws FaceClientException
* @throws FaceServerException
*/
- public TrainResponse train(String uids) throws FaceClientException, FaceServerException;
+ public void train(String uids) throws FaceClientException, FaceServerException;
/** Adds a manual tag for a Photo.But manual tags are not used to train the system. They are used for the purpose
* of adding face tags for the Photos which were not detected by your program.
@@ -135,7 +135,7 @@
* @throws FaceClientException
* @throws FaceServerException
*/
- public List<PhotarkPhoto> recognizeFromUrls(String urls, String uids) throws FaceClientException, FaceServerException ;
+ public PhotarkPhoto recognizeFromUrl(String urls, String uids) throws FaceClientException, FaceServerException ;
/** Gives tags of the detected faces of the given photo with multiple details of the Photo
*
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java
index 9b60e5a..e82e04c 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java
@@ -61,8 +61,8 @@
/**
* @see {@link FaceRecognitionService#train(String)}
*/
- public TrainResponse train(String uids) throws FaceClientException, FaceServerException {
- return defaultFaceClient.train(uids);
+ public void train(String uids) throws FaceClientException, FaceServerException {
+ defaultFaceClient.train(uids);
}
/**
@@ -102,14 +102,12 @@
}
/**
- * @see {@link FaceRecognitionService#recognizeFromUrls(String,String)}
+ * @see {@link FaceRecognitionService#recognizeFromUrl(String,String)}
*/
- public List<PhotarkPhoto> recognizeFromUrls(String urls, String uids) throws FaceClientException, FaceServerException {
- List<PhotarkPhoto> photarkPhotoList = null;
- for(Photo p : defaultFaceClient.recognize(urls, uids)) {
- photarkPhotoList.add(BeanGeneratorUtil.createPhotarkPhoto(p));
- }
- return photarkPhotoList ;
+ public PhotarkPhoto recognizeFromUrl(String url, String uid) throws FaceClientException, FaceServerException {
+ Photo p = defaultFaceClient.recognize(url, uid).get(0);
+ return BeanGeneratorUtil.createPhotarkPhoto(p);
+
}
/**
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java
index 41dbc17..f6f9496 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java
@@ -24,10 +24,12 @@
@Remotable
public interface FacebookFriendFinder {
- public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile);
+ public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile,String photarkUid);
- public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl);
+ public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl,String photarkUid);
public void setFacebookAuth(String facebookId, String fbAccessToken);
+ public void storeFacebookAccessToken(String photarkUid, String accessToken);
+
}
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java
index 7803109..36f7c62 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java
@@ -18,12 +18,20 @@
*/
package org.apache.photark.face.services.applications.facebook;
+import com.github.mhendred.face4j.DefaultFaceClient;
import com.github.mhendred.face4j.exception.FaceClientException;
import com.github.mhendred.face4j.exception.FaceServerException;
+import com.restfb.DefaultFacebookClient;
+import com.restfb.FacebookClient;
+import com.restfb.types.User;
import org.apache.photark.face.services.FaceRecognitionService;
import org.apache.photark.face.services.beans.PhotArkFace;
import org.apache.photark.face.services.beans.PhotarkPhoto;
+import org.apache.photark.security.authorization.services.AccessManager;
+import org.apache.photark.security.authorization.services.SecurityServiceImpl;
+import org.apache.photark.security.utils.Constants;
import org.apache.tuscany.sca.data.collection.Entry;
+import org.oasisopen.sca.annotation.Init;
import org.oasisopen.sca.annotation.Reference;
import org.oasisopen.sca.annotation.Scope;
@@ -37,38 +45,55 @@
private FaceRecognitionService faceRecognitionService;
private final String adamFBUserId = "";
private final String adamAccessToken = "";
+ private AccessManager accessManager;
-
+ @Init
+ public void init() {
+ System.out.println("############## INIT..............############");
+ }
+
@Reference(name = "faceRecognitionService")
protected void setFaceRecognitionService(FaceRecognitionService faceRecognitionService) {
this.faceRecognitionService = faceRecognitionService;
}
- public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile) {
- return processFBFriends(pathToFile, true);
+ @Reference(name = "accessmanager")
+ protected void setAccessService(AccessManager accessManager) {
+ this.accessManager = accessManager;
}
- public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl) {
+ public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile,String photarkUid) {
- return processFBFriends(fileUrl, false);
+ return processFBFriends(pathToFile, true, photarkUid);
+ }
+
+ public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl, String photarkUid) {
+
+ return processFBFriends(fileUrl, false, photarkUid);
+ }
+
+ public void storeFacebookAccessToken(String photarkUid, String accessToken) {
+ faceRecognitionService.setFacebookOauth2(getMyFacebookUserId(accessToken), accessToken);
+ accessManager.setFacebookAccessTokenToUser(photarkUid,Constants.REGISTERED_USER_LIST,accessToken);
}
public void setFacebookAuth(String facebookId, String fbAccessToken) {
faceRecognitionService.setFacebookOauth2(facebookId, fbAccessToken);
}
- private Entry<String, String>[] processFBFriends(String fileLocation, boolean isLocal) {
+
+ private Entry<String, String>[] processFBFriends(String fileLocation, boolean isLocal, String photarkUid) {
PhotarkPhoto photo = null;
List<Entry<String, String>> detectedFriends = new ArrayList<Entry<String, String>>();
-
+ String accessToken = accessManager.getUserFacebookAccessToken(photarkUid,Constants.REGISTERED_USER_LIST);
try {
- faceRecognitionService.setFacebookOauth2(adamFBUserId, adamAccessToken);
+ faceRecognitionService.setFacebookOauth2(getMyFacebookUserId(accessToken),accessToken);
if (isLocal) {
photo = faceRecognitionService.recognizeFromFile(new File(fileLocation), "friends@facebook.com");
} else {
- photo = faceRecognitionService.recognizeFromUrls(fileLocation, "friends@facebook.com").get(0);
+ photo = faceRecognitionService.recognizeFromUrl(fileLocation, "friends@facebook.com");
}
for (PhotArkFace face : photo.getPhotArkFaces()) {
@@ -95,4 +120,10 @@
}
+ private String getMyFacebookUserId(String accessToken) {
+ FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
+ User user = facebookClient.fetchObject("me", User.class);
+ return user.getId();
+ }
+
}
diff --git a/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java b/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java
index 4b57239..4edb31e 100644
--- a/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java
+++ b/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java
@@ -41,8 +41,8 @@
public class GenericFaceRecognitionTestCase {
private DefaultFaceClient defaultFaceClient;
- private String apiKey = "5ae7a7ddcba07b5d4731930bfe06f4c7";
- private String apiSecret = "6877f93df2c2bcef2a1ddb6ba26a0d6c";
+ private String apiKey = "";
+ private String apiSecret = "";
private static Node node;
@@ -89,8 +89,8 @@
defaultFaceClient.train("jenifer@photark.com");
PhotarkPhoto p =
defaultFaceClient
- .recognizeFromUrls("https://lh3.googleusercontent.com/-4I_Yn56XwAw/Thi6LIZSutI/AAAAAAAAABo/jOjx2cGgHao/s128/110306_latinjlo_400X400.jpg",
- "jenifer@photark.com").get(0);
+ .recognizeFromUrl("https://lh3.googleusercontent.com/-4I_Yn56XwAw/Thi6LIZSutI/AAAAAAAAABo/jOjx2cGgHao/s128/110306_latinjlo_400X400.jpg",
+ "jenifer@photark.com");
for (PhotArkFace f : p.getPhotArkFaces()) {
if (f.getGuess() == null) {
diff --git a/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java b/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java
index 2ba2888..42b58dd 100644
--- a/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java
+++ b/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java
@@ -1170,6 +1170,65 @@
}
+ public void setFacebookAccessTokenToUser(String userId, String listName, String accesstoken) {
+
+ Session session;
+ try {
+
+ if(isUserStoredInList(userId,listName)) {
+
+ session = repositoryManager.getSession();
+
+ Node listNodeUsers = (Node)session.getItem("/" + USER_STORE + "/" + USER_LISTS + "/" + listName);
+ Node userNode = listNodeUsers.getNode(JCREncoder.toJCRFormat(userId));
+
+ if(!userNode.hasProperty("photark.facebook.accesstoken")) {
+ userNode.setProperty("photark.facebook.accesstoken",accesstoken);
+ }
+ session.save();
+
+ }
+ } catch (LoginException e) {
+
+ e.printStackTrace();
+ } catch (RepositoryException e) {
+
+ e.printStackTrace();
+ }
+
+ }
+
+ public String getUserFacebookAccessToken(String userId, String listName) {
+
+ Session session;
+ String accessToken = "";
+ try {
+
+ if(isUserStoredInList(userId,listName)) {
+
+ session = repositoryManager.getSession();
+
+ Node listNodeUsers = (Node)session.getItem("/" + USER_STORE + "/" + USER_LISTS + "/" + listName);
+ Node userNode = listNodeUsers.getNode(JCREncoder.toJCRFormat(userId));
+
+ if(userNode.hasProperty("photark.facebook.accesstoken")) {
+ accessToken = userNode.getProperty("photark.facebook.accesstoken").getValue().getString();
+ }
+ session.save();
+
+ }
+ } catch (LoginException e) {
+
+ e.printStackTrace();
+ } catch (RepositoryException e) {
+
+ e.printStackTrace();
+ }
+
+
+ return accessToken;
+ }
+
// save access list and token in the access token map
public synchronized void putAccessListAndToken(AccessList accessList, String token) {
diff --git a/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java b/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java
index 6083dcc..2dc905a 100644
--- a/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java
+++ b/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java
@@ -157,4 +157,22 @@
* @return The userID of the user
*/
String getUserIdFromSecurityToken(String token);
+
+ /**
+ *
+ * @param userId user id of the currrent user
+ * @param accesstoken facebook access token
+ * @param listName - list name to retrieve the user
+ * @return
+ */
+ void setFacebookAccessTokenToUser(String userId, String listName, String accesstoken);
+
+ /**
+ *
+ * @param userId user id of the currrent user
+ * @param listName list name to retrieve the user
+ * @return
+ */
+ String getUserFacebookAccessToken(String userId, String listName);
+
}
diff --git a/photark-ui-admin/src/main/webapp/admin/face.html b/photark-ui-admin/src/main/webapp/admin/face.html
index d9a5358..c63f067 100644
--- a/photark-ui-admin/src/main/webapp/admin/face.html
+++ b/photark-ui-admin/src/main/webapp/admin/face.html
@@ -24,7 +24,7 @@
<title>Apache PhotArk - Face Recognition</title>
- <script type="text/javascript" src="js/constants.js"></script>
+ <script type="text/javascript" src="../js/constants.js"></script>
<script type="text/javascript" src="../dojo/dojo.js"
djConfig="isDebug:false, parseOnLoad: true, debugAtAllCosts:false"></script>
<script type="text/javascript" src="js/face.js"></script>
diff --git a/photark-ui-admin/src/main/webapp/admin/js/admin.js b/photark-ui-admin/src/main/webapp/admin/js/admin.js
index 50f9165..04b441b 100644
--- a/photark-ui-admin/src/main/webapp/admin/js/admin.js
+++ b/photark-ui-admin/src/main/webapp/admin/js/admin.js
@@ -287,7 +287,7 @@
}
-function populateUserInfo() {
+function populateUserInfo() {
dojo.xhrPost({
url:"../security", //photark.constants.SecurityEndpoint,
content:{request:"getUser"},
diff --git a/photark-ui-admin/src/main/webapp/admin/js/face.js b/photark-ui-admin/src/main/webapp/admin/js/face.js
index 003678a..bd44b0c 100644
--- a/photark-ui-admin/src/main/webapp/admin/js/face.js
+++ b/photark-ui-admin/src/main/webapp/admin/js/face.js
@@ -80,9 +80,8 @@
var url = window.location.href;
if (url != "http://localhost:8080/photark/admin/face.html") {
var accesstoken = url.split("&")[0].split("=")[1];
-
- alert(accesstoken);
-
+ store_facebook_access_token(accesstoken) ;
+
}
}
@@ -95,27 +94,44 @@
window.location = url;
}
-function trainUser() {
+function trainUser(user_name) {
if (selectFaceApp.value == "General-Face-Recognition") {
//TODO call train method in generic face app
} else if (selectFaceApp.value == "FaceBook-Friend-Finder") {
- faceService.train("1271543184@facebook.com").addCallback(facebook_ff_callback);
+ faceService.train(user_name).addCallback(facebook_ff_callback);
}
}
+function store_facebook_access_token(accessToken) {
+ dojo.xhrPost({
+ url:"../security", //photark.constants.SecurityEndpoint,
+ content:{request:"getUser"},
+ handleAs: "json",
+ load: function(response, ioArgs) {
+ facebookService.storeFacebookAccessToken(response.user.userId,accessToken).addCallback(facebook_ff_void_callback);
+ },
+ error: function(response, ioArgs) {
+
+ }
+ });
+}
+
function face_callback(items, exception) {
if (exception) {
alert("Error");
}
+
+ alert(items);
}
-function facebook_ff_callback(items, exception) {
+function facebook_ff_void_callback(items, exception) {
if (exception) {
alert("Error");
+ } else {
+// alert("CAME");
}
- alert("AA");
}
diff --git a/photark-ui/src/main/webapp/js/gallery.js b/photark-ui/src/main/webapp/js/gallery.js
index fe939b7..59e9b5e 100644
--- a/photark-ui/src/main/webapp/js/gallery.js
+++ b/photark-ui/src/main/webapp/js/gallery.js
@@ -276,10 +276,19 @@
}
function showFacebookFriends(){
- facebook_ff.getAllMyFBFriendsFromPictureLocal("/home/subash/IdeaProjects/pics/friends_2.jpg").addCallback(facebook_ff_callback);
+ var file_path = document.getElementById("albumImage").src;
+ dojo.xhrPost({
+ url:"security", //photark.constants.SecurityEndpoint,
+ content:{request:"getUser"},
+ handleAs: "json",
+ load: function(response, ioArgs) {
+ facebook_ff.getAllMyFBFriendsFromPictureUrl(file_path,response.user.userId).addCallback(facebook_ff_callback);
+ },
+ error: function(response, ioArgs) {
-//facebook_ff.getAllMyFBFriendsFromPictureUrl("https://lh4.googleusercontent.com/-rb_m-GQcL00/Ti8sqThvrDI/AAAAAAAAAMY/kUBurbFKJ0A/s640/friends_2.jpg").addCallback(facebook_ff_callback);
-//facebook_ff.getTest("/home/subash/IdeaProjects/pics/friends_2.jpg").addCallback(facebook_ff_callback);
+ }
+ });
+
}
function face_callback(items, exception) {
diff --git a/photark-webapp/src/main/webapp/WEB-INF/web.composite b/photark-webapp/src/main/webapp/WEB-INF/web.composite
index 15b1557..c72d226 100644
--- a/photark-webapp/src/main/webapp/WEB-INF/web.composite
+++ b/photark-webapp/src/main/webapp/WEB-INF/web.composite
@@ -187,6 +187,8 @@
<tuscany:binding.jsonrpc uri="/FacebookFriendFinder"/>
</service>
<reference name="faceRecognitionService" target="FaceRecognitionService"/>
+ <reference name="accessmanager" target="AccessManager"/>
+
</component>