我正在使用Parse和Facebook开发我的第一个Android应用程序,所以我对它很陌生.
我正在尝试检索用户的好友列表,Request.newMyFriendsRequest()但在使用真实用户进行测试时,它会给我一个空列表.
据我所知,只有Graph API v2.0这个请求才会返回同时使用该应用程序的人的朋友.
出于这个目的,我创建了一个假的Fb配置文件,我在Facebook上与我的真实个人资料成为朋友,安装了我的应用程序,ParseUser使用ParseFacebookUtils.link两个配置文件注册并与Facebook链接,但请求返回一个空的朋友列表.
我在Facebook的App仪表板中创建了几个测试用户,并模拟了他们之间的几个友谊.我在我的应用程序(注册parseUser,链接ParseFacebookUtils.link)中使用其中两个进行了相同的过程,并且列表users.size() 按预期返回2个朋友.
为什么它不适用于我的实际配置文件和假配置文件(这与任何其他实际配置文件一样)?
这是我链接配置文件的方式:
List<String> permissions = new ArrayList<String>();
permissions.add("public_profile");
permissions.add("user_friends");
ParseFacebookUtils.link(currentUser, permissions, MainActivity.this, new SaveCallback() {
@Override
public void done(ParseException ex) {
if (ParseFacebookUtils.isLinked(currentUser)) {
Log.d(TAG, "Woohoo, user logged in with Facebook!");
Toast.makeText(getApplicationContext(), "Facebook succesfully linked", Toast.LENGTH_LONG).show();
}
if (ex != null) {
Log.d (TAG, ex.getLocalizedMessage() + "\n + Exception Code: " + ex.getCode());
}
}); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用openCV用iPhone相机检测名片的边缘(并绘制它们).我是这个框架的新手,以及计算机视觉或C++.
我正在尝试使用此处解释的解决方案:https://stackoverflow.com/a/14123682/3708095,其中github项目是https://github.com/foundry/OpenCVSquares
它适用于预定义的图像,但我正在尝试使用相机.
为此,我正在使用它CvVideoCameraDelegate protocol实现它,CVViewController.mm就像他们在http://docs.opencv.org/doc/tutorials/ios/video_processing/video_processing.html中解释一样:
#ifdef __cplusplus
-(void)processImage:(cv::Mat &)matImage
{
//NSLog (@"Processing Image");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
matImage = CVSquares::detectedSquaresInImage(matImage, self.tolerance, self.threshold, self.levels, [self accuracy]);
UIImage *image = [[UIImage alloc]initWithCVMat:matImage orientation:UIImageOrientationDown];
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
});
});
}
#endif
Run Code Online (Sandbox Code Playgroud)
编辑:
如果我这样做,它给了我一个EXC_BAD_ACCESS ...
如果我在处理它之前克隆matImage,通过记录它,它似乎处理图像甚至找到矩形,但矩形不会被绘制到图像输出到imageView.
cv::Mat temp = matImage.clone();
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *image = [[UIImage alloc]CVSquares::detectedSquaresInImage(temp, self.tolerance, self.threshold, self.levels, [self accuracy])
orientation:UIImageOrientationDown];
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
});
});
Run Code Online (Sandbox Code Playgroud)
我很确定我错过了一些东西,可能是因为我没有正确传递某个对象,指向对象的指针等等,而我需要修改的对象则没有. …
我正在尝试使用GPUImage的HoughTransform来检测名片的边缘,因为它似乎是使用此框架从我发现的类似问题/问题中实现此任务的最佳方式.
我能得到的最好结果就是将lineDetectionThreshold设置为0.25,这样就可以给出4行界定名片,同时最小化行总数.
我无法确定edgeThreshold参数是否有帮助.
通过我得到的线条,我将过滤掉彼此非常相似的线条(通常在每条边缘上找到很多!),将它们分成水平和垂直,然后找到2条水平线和2条垂直线,可以形成一个矩形.
由于文本或名片本身的形状,我仍然找到很多行,数字越大,视频流的性能越差.
我试图添加一些预处理,但不是很成功,可能是因为我不知道哪种技术可以帮助我.
如何才能改善仅确定边缘的4条线的检测?实际上,有可能吗?
编辑:
这里有一些图片来说明.我删除了名片中的徽标和详细信息以保护隐私.
使用0.25阈值获得的原始线(此阈值有时会在处理视频时丢失一些边缘)

使用相同图像手动过滤后的行:

另一个例子,虽然这可能更难,甚至添加预处理步骤:
原线:

过滤线:

image-processing edge-detection hough-transform ios gpuimage
如果我覆盖了UIViewController的 funcviewSafeAreaInsetsDidChange是否需要调用 super?
override func viewSafeAreaInsetsDidChange() {
super.viewSafeAreaInsetsDidChange()
// do my stuff
}
Run Code Online (Sandbox Code Playgroud)
我知道,如果您覆盖func viewWillAppear(_ animated: Bool)并且没有调用super内部,您的应用程序可能会运行不正常。苹果实际上说你必须super在某个时候打电话。我想这不是这里的情况,这就是我想要确认的!