Android storing GPS in jpeg gets corrupted - android

I have created a simple Android-Application that takes a photo and stores the devices GPS infos in the exif-tags for the jpg-file. The following code shows this process (i know it's messy)
Android.Locations.Location loc = await client.GetLastLocationAsync();
ByteBuffer buffer = mImage.GetPlanes()[0].Buffer;
byte[] bytes = new byte[buffer.Remaining()];
buffer.Get(bytes);
using (var output = new FileOutputStream(mFile))
{
try
{
output.Write(bytes);
output.Flush();
ExifInterface exif = new ExifInterface(mFile.AbsolutePath);
string[] degMinSec = Location.Convert(loc.Latitude, Format.Seconds).Split(':');
string dms = degMinSec[0] + "/1," + degMinSec[1] + "/1" + degMinSec[2] + "/1000";
string[] degMinSec1 = Location.Convert(loc.Longitude, Format.Seconds).Split(':');
string dms1 = degMinSec1[0] + "/1," + degMinSec1[1] + "/1" + degMinSec1[2] + "/1000";
exif.SetAttribute(ExifInterface.TagGpsLatitude, dms);
exif.SetAttribute(ExifInterface.TagGpsLatitudeRef, loc.Latitude < 0?"S":"N");
exif.SetAttribute(ExifInterface.TagGpsLongitude, dms1);
exif.SetAttribute(ExifInterface.TagGpsLongitudeRef, loc.Longitude < 0 ? "W" : "E");
exif.SaveAttributes();
}
...
So now to the problem:
When i take a picture and debug the loc variable, it looks as this:
as you can see, the latitude is 48.4080605 and de longitude is 15.6257273
when i debug the converted values dms & dms1 they show these values:
dms represents latitude and has the value 48° 24' 29.0178'', dms1 represents longitude and has the value 15° 37' 32.61828''.
when i look at the pictures exif-data in metapicz.com it shows these values:
can anyone explain me what is going on and what i'm doing wrong?
i can't figure out why it shows a different location than it should

dms = degMinSec[0] + "/1," + degMinSec[1] + "/1" + degMinSec[2] + "/1000";
Should that not be
dms = degMinSec[0] + "/1," + degMinSec[1] + "/1," + degMinSec[2] + "/1000";
?

Related

Example pointclouds with ARCore

Can I get some examples about pointclouds with ARCore? I really search it for days.
Currently I am working on an application similar to this one:This app
Has the feature to view pcl and save files in .ply format
Thanks
The HelloARSample app renders pointcloud in a scene. You can get the coordinates for each point and save them manually in a .ply format.
To get a point cloud, you can create a float buffer and add the points from each frame.
FloatBuffer myPointCloud = FloatBuffer.allocate(capacity);
Session session = new Session(context);
Frame frame = session.update();
try (PointCloud ptcld = frame.acquirePointCloud()) {
myPointCloud.put(ptcld.getPoints());
}
The float buffer saves the points like [x1,x1,z1,confidence1, x2,x2,z2,confidence2, ...].
I havent looked at .ply file struckture, but if you want to save it to a .pcd file, you must create a header, then insert a point per line. Here is a detailed explanation on how to do it.
I did it like this
private boolean savePointCloudFile() {
String data = "";
String fileName = "pointCloud";
int points = 0;
String holder = "";
// Write the point cloud data by iterating over each point:
for (int i=0; i<pointCloud.position(); i+=4) {
data += pointCloud.get(i) + " " + // x
pointCloud.get(i + 1) + " " + // y
pointCloud.get(i + 2) + " " + // z
pointCloud.get(i + 3) + "\n"; // confidence
points = i;
}
points = points / 4 - 10; // Removed last 10 points to prevent errors in case that I lost points
// Write file header
data = "# .PCD v.7 - Point Cloud Data file format\n" +
"VERSION .7\n" +
"FIELDS x y z rgb\n" + // confidence represented by rgb
"SIZE 4 4 4 4\n" + // you only have 3 values xyz
"TYPE F F F F\n" + // all floats
"COUNT 1 1 1 1\n" +
"WIDTH " + points + "\n" +
"HEIGHT 1\n" +
"VIEWPOINT 0 0 0 1 0 0 0\n" +
"POINTS " + points + "\n" +
"DATA ascii \n" + data;
//BufferedWriter out = new BufferedWriter(new FileWriter(new File(new File(Environment.getExternalStoragePublicDirectory(
// Environment.DIRECTORY_DOCUMENTS), fileName + ".pcd"));
try {
File file = new File(context.getExternalFilesDir(null), fileName +".pcd");
FileOutputStream stream = new FileOutputStream(file);
file.createNewFile();
//FileOutputStream out = new FileOutputStream(file);
stream.write(data.getBytes());
stream.close();
Log.i("SUCCESS", "File saved successfully in " + file.getAbsolutePath());
return true;
} catch (IOException e) {
Log.e("Exception", "File write failed: " + e.toString());
return false;
}
}
You should save the file from within a separate thread as it may cause a timeout error, because it takes too long to save so many points to a file.
You should get a file similar to this
# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 3784
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 3784
DATA ascii
0.068493545 -0.18897545 -0.6662081 0.007968704
0.26833203 -0.18425867 -1.5039357 0.02365576
0.19286658 -0.2141684 -1.58289 0.038087178
0.070703566 -0.17931458 -0.69418937 0.016636848
0.044586033 -0.18726173 -0.6926071 0.024707714
0.04002113 -0.20350328 -0.68689686 0.018577512
0.029185327 -0.18594348 -0.73340106 0.12292312
0.0027626567 -0.20299685 -1.5578543 0.15424652
-0.031320766 -0.20478198 -0.70128816 0.13745676
-0.06351853 -0.20185146 -0.61755043 0.15234329
-0.08655308 -0.19128543 -0.6776818 0.170851
1.0159657 -0.41043654 -6.8713074 0.05946503
-0.031778865 -0.20536968 -1.5218562 0.15976532
-0.09223208 -0.19543779 -0.61643535 0.12331226
0.02384475 -0.20319816 -1.7497014 0.15273231
-0.10013421 -0.19931296 -0.5924832 0.16186734
0.49137634 -0.09052197 -5.7263794 0.16080469
To viaualize the point cloud you can use pcl_viewer or Matlab. In Matlab I just typed
ptCloud = pcread('pointCloud.pcd');
pcshow(ptCloud);

Why am I getting "java.lang.String cannot be converted to JSONObject" error?

I getting
"Value SAMPLE_JSON_RESPONSE of type java.lang.String cannot be
converted to JSONObject"
error. I think I have to format the 'SAMPLE_JSON_RESPONSE', if so please tell me how do I do that ?
private static final String SAMPLE_JSON_RESPONSE = "{\"type\":\"FeatureCollection\",\"metadata\":{\"generated\":1462295443000,\"url\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2016-01-01&endtime=2016-01-31&minmag=6&limit=10\",\"title\":\"USGS Earthquakes\",\"status\":200,\"api\":\"1.5.2\",\"limit\":10,\"offset\":1,\"count\":10},\"features\":[{\"type\":\"Feature\",\"properties\":{\"mag\":7.2,\"place\":\"88km N of Yelizovo, Russia\",\"time\":1454124312220,\"updated\":1460674294040,\"tz\":720,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us20004vvx\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us20004vvx&format=geojson\",\"felt\":2,\"cdi\":3.4,\"mmi\":5.82,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":798,\"net\":\"us\",\"code\":\"20004vvx\",\"ids\":\",at00o1qxho,pt16030050,us20004vvx,gcmt20160130032510,\",\"sources\":\",at,pt,us,gcmt,\",\"types\":\",cap,dyfi,finite-fault,general-link,general-text,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":0.958,\"rms\":1.19,\"gap\":17,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 7.2 - 88km N of Yelizovo, Russia\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[158.5463,53.9776,177]},\"id\":\"us20004vvx\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.1,\"place\":\"94km SSE of Taron, Papua New Guinea\",\"time\":1453777820750,\"updated\":1460156775040,\"tz\":600,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us20004uks\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us20004uks&format=geojson\",\"felt\":null,\"cdi\":null,\"mmi\":4.1,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":572,\"net\":\"us\",\"code\":\"20004uks\",\"ids\":\",us20004uks,gcmt20160126031023,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,geoserve,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":1.537,\"rms\":0.74,\"gap\":25,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.1 - 94km SSE of Taron, Papua New Guinea\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[153.2454,-5.2952,26]},\"id\":\"us20004uks\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.3,\"place\":\"50km NNE of Al Hoceima, Morocco\",\"time\":1453695722730,\"updated\":1460156773040,\"tz\":0,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004gy9\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004gy9&format=geojson\",\"felt\":117,\"cdi\":7.2,\"mmi\":5.28,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":0,\"sig\":695,\"net\":\"us\",\"code\":\"10004gy9\",\"ids\":\",us10004gy9,gcmt20160125042203,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":2.201,\"rms\":0.92,\"gap\":20,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.3 - 50km NNE of Al Hoceima, Morocco\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-3.6818,35.6493,12]},\"id\":\"us10004gy9\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":7.1,\"place\":\"86km E of Old Iliamna, Alaska\",\"time\":1453631430230,\"updated\":1460156770040,\"tz\":-540,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004gqp\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004gqp&format=geojson\",\"felt\":1816,\"cdi\":7.2,\"mmi\":6.6,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":1496,\"net\":\"us\",\"code\":\"10004gqp\",\"ids\":\",at00o1gd6r,us10004gqp,ak12496371,gcmt20160124103030,\",\"sources\":\",at,us,ak,gcmt,\",\"types\":\",cap,dyfi,finite-fault,general-link,general-text,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,trump-origin,\",\"nst\":null,\"dmin\":0.72,\"rms\":2.11,\"gap\":19,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 7.1 - 86km E of Old Iliamna, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-153.4051,59.6363,129]},\"id\":\"us10004gqp\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.6,\"place\":\"215km SW of Tomatlan, Mexico\",\"time\":1453399617650,\"updated\":1459963829040,\"tz\":-420,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004g4l\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004g4l&format=geojson\",\"felt\":11,\"cdi\":2.7,\"mmi\":3.92,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":673,\"net\":\"us\",\"code\":\"10004g4l\",\"ids\":\",at00o1bebo,pt16021050,us10004g4l,gcmt20160121180659,\",\"sources\":\",at,pt,us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":2.413,\"rms\":0.98,\"gap\":74,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.6 - 215km SW of Tomatlan, Mexico\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-106.9337,18.8239,10]},\"id\":\"us10004g4l\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.7,\"place\":\"52km SE of Shizunai, Japan\",\"time\":1452741933640,\"updated\":1459304879040,\"tz\":540,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004ebx\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004ebx&format=geojson\",\"felt\":51,\"cdi\":5.8,\"mmi\":6.45,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":720,\"net\":\"us\",\"code\":\"10004ebx\",\"ids\":\",us10004ebx,pt16014050,at00o0xauk,gcmt20160114032534,\",\"sources\":\",us,pt,at,gcmt,\",\"types\":\",associate,cap,dyfi,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,\",\"nst\":null,\"dmin\":0.281,\"rms\":0.98,\"gap\":22,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.7 - 52km SE of Shizunai, Japan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[142.781,41.9723,46]},\"id\":\"us10004ebx\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.1,\"place\":\"12km WNW of Charagua, Bolivia\",\"time\":1452741928270,\"updated\":1459304879040,\"tz\":-240,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004ebw\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004ebw&format=geojson\",\"felt\":3,\"cdi\":2.2,\"mmi\":2.21,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":0,\"sig\":573,\"net\":\"us\",\"code\":\"10004ebw\",\"ids\":\",us10004ebw,gcmt20160114032528,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":5.492,\"rms\":1.04,\"gap\":16,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.1 - 12km WNW of Charagua, Bolivia\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-63.3288,-19.7597,582.56]},\"id\":\"us10004ebw\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.2,\"place\":\"74km NW of Rumoi, Japan\",\"time\":1452532083920,\"updated\":1459304875040,\"tz\":540,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004djn\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004djn&format=geojson\",\"felt\":8,\"cdi\":3.4,\"mmi\":3.74,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":0,\"sig\":594,\"net\":\"us\",\"code\":\"10004djn\",\"ids\":\",us10004djn,gcmt20160111170803,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":1.139,\"rms\":0.96,\"gap\":33,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.2 - 74km NW of Rumoi, Japan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[141.0867,44.4761,238.81]},\"id\":\"us10004djn\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6.5,\"place\":\"227km SE of Sarangani, Philippines\",\"time\":1452530285900,\"updated\":1459304874040,\"tz\":480,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004dj5\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004dj5&format=geojson\",\"felt\":1,\"cdi\":2.7,\"mmi\":7.5,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":1,\"sig\":650,\"net\":\"us\",\"code\":\"10004dj5\",\"ids\":\",at00o0srjp,pt16011050,us10004dj5,gcmt20160111163807,\",\"sources\":\",at,pt,us,gcmt,\",\"types\":\",cap,dyfi,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":3.144,\"rms\":0.72,\"gap\":22,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.5 - 227km SE of Sarangani, Philippines\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[126.8621,3.8965,13]},\"id\":\"us10004dj5\"},\n" +
"{\"type\":\"Feature\",\"properties\":{\"mag\":6,\"place\":\"Pacific-Antarctic Ridge\",\"time\":1451986454620,\"updated\":1459202978040,\"tz\":-540,\"url\":\"http://Earthquake.usgs.gov/earthquakes/eventpage/us10004bgk\",\"detail\":\"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us10004bgk&format=geojson\",\"felt\":0,\"cdi\":1,\"mmi\":0,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":0,\"sig\":554,\"net\":\"us\",\"code\":\"10004bgk\",\"ids\":\",us10004bgk,gcmt20160105093415,\",\"sources\":\",us,gcmt,\",\"types\":\",cap,dyfi,geoserve,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,\",\"nst\":null,\"dmin\":30.75,\"rms\":0.67,\"gap\":71,\"magType\":\"mww\",\"type\":\"Earthquake\",\"title\":\"M 6.0 - Pacific-Antarctic Ridge\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-136.2603,-54.2906,10]},\"id\":\"us10004bgk\"}],\"bbox\":[-153.4051,-54.2906,10,158.5463,59.6363,582.56]}";
private QueryUtils() {
public static ArrayList<Earthquake> extractEarthquakes() {
ArrayList<Earthquake> earthquakes = new ArrayList<>();
try {
JSONObject baseJsonResponse = new JSONObject(SAMPLE_JSON_RESPONSE);
JSONArray earthquakeArray = baseJsonResponse.getJSONArray("features");
for (int i = 0; i < earthquakeArray.length(); i++) {
JSONObject currentEarthquake = earthquakeArray.getJSONObject(i);
JSONObject properties = currentEarthquake.getJSONObject("properties");
String magnitude = properties.getString("mag");
String location = properties.getString("place");
String time = properties.getString("time");
Earthquake earthquake = new Earthquake(magnitude, location, time);
earthquakes.add(earthquake);
}
} catch (JSONException e) {
Log.e("QueryUtils", "Problem parsing the Earthquake JSON results", e);
}
return earthquakes;
}
In order to create a JSON object from a string is has to be properly escaped and it currently isn't
There is a lot of JSON in your post so I've taken the first line of the JSON to use as an example (this would be the first features object). I then unescaped the JSON and then validated the json. There are many tools to do this, but I used https://www.freeformatter.com/json-escape.html for formatting and https://jsonlint.com/ for validating the JSON. I found a few issues with the JSON object (around the new line \n escaping). I've been able to then escape the JSON by pasting it into Android Studio as shown below and the JSON now parses the string into a JSONObject.
I suggest you do the same and go line by line until you have validated all of the JSON and then paste the valid JSON between the quotation marks private static final String SAMPLE_JSON_RESPONSE = "";
Android Studio (and hopefully other IDEs should then escape the JSON correctly, or you'll have to use a JSON escaping utility)
private static final String SAMPLE_JSON_RESPONSE = "{\n" +
"\t\"type\": \"FeatureCollection\",\n" +
"\t\"metadata\": {\n" +
"\t\t\"generated\": 1462295443000,\n" +
"\t\t\"url\": \"http://Earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2016-01-01&endtime=2016-01-31&minmag=6&limit=10\",\n" +
"\t\t\"title\": \"USGS Earthquakes\",\n" +
"\t\t\"status\": 200,\n" +
"\t\t\"api\": \"1.5.2\",\n" +
"\t\t\"limit\": 10,\n" +
"\t\t\"offset\": 1,\n" +
"\t\t\"count\": 10\n" +
"\t},\n" +
"\t\"features\": [{\n" +
"\t\t\"type\": \"Feature\",\n" +
"\t\t\"properties\": {\n" +
"\t\t\t\"mag\": 7.2,\n" +
"\t\t\t\"place\": \"88km N of Yelizovo, Russia\",\n" +
"\t\t\t\"time\": 1454124312220,\n" +
"\t\t\t\"updated\": 1460674294040,\n" +
"\t\t\t\"tz\": 720,\n" +
"\t\t\t\"url\": \"http://Earthquake.usgs.gov/earthquakes/eventpage/us20004vvx\",\n" +
"\t\t\t\"detail\": \"http://Earthquake.usgs.gov/fdsnws/event/1/query?eventid=us20004vvx&format=geojson\",\n" +
"\t\t\t\"felt\": 2,\n" +
"\t\t\t\"cdi\": 3.4,\n" +
"\t\t\t\"mmi\": 5.82,\n" +
"\t\t\t\"alert\": \"green\",\n" +
"\t\t\t\"status\": \"reviewed\",\n" +
"\t\t\t\"tsunami\": 1,\n" +
"\t\t\t\"sig\": 798,\n" +
"\t\t\t\"net\": \"us\",\n" +
"\t\t\t\"code\": \"20004vvx\",\n" +
"\t\t\t\"ids\": \",at00o1qxho,pt16030050,us20004vvx,gcmt20160130032510,\",\n" +
"\t\t\t\"sources\": \",at,pt,us,gcmt,\",\n" +
"\t\t\t\"types\": \",cap,dyfi,finite-fault,general-link,general-text,geoserve,impact-link,impact-text,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\n" +
"\t\t\t\"nst\": null,\n" +
"\t\t\t\"dmin\": 0.958,\n" +
"\t\t\t\"rms\": 1.19,\n" +
"\t\t\t\"gap\": 17,\n" +
"\t\t\t\"magType\": \"mww\",\n" +
"\t\t\t\"type\": \"Earthquake\",\n" +
"\t\t\t\"title\": \"M 7.2 - 88km N of Yelizovo, Russia\"\n" +
"\t\t},\n" +
"\t\t\"geometry\": {\n" +
"\t\t\t\"type\": \"Point\",\n" +
"\t\t\t\"coordinates\": [158.5463, 53.9776, 177]\n" +
"\t\t},\n" +
"\t\t\"id\": \"us20004vvx\"\n" +
"\t}]\n" +
"}";
JSONObject baseJsonResponse = new JSONObject(SAMPLE_JSON_RESPONSE);

Convert Bytes to MB with Decimal Point

How would I be able to convert bytes received from TrafficStats.getTotalRxBytes() to MB with a format to start like this 0.5 or 0.7 MB.
This a snippet of what I did:
TextView txtData = (TextView)findViewById(R.id.txtBytes);
long rxBytes = TrafficStats.getTotalRxBytes()- mStartRX;
if(rxBytes>=1024){
DecimalFormat formatKB = new DecimalFormat("0");
double rxKb = rxBytes/1024;
txtData.setText("0" + "." + formatKB.format(rxKb) + " KB");
if(rxKb>=1024){
DecimalFormat formatMB = new DecimalFormat("0.0");
double rxMB = rxKb/1024;
txtData.setText(formatMB.format(rxMB) + " MB");
if(rxMB>=1024){
DecimalFormat formatGB = new DecimalFormat("0.0");
double rxGB = rxMB/1024;
txtData.setText(formatGB.format(rxGB) + " GB");
}
}
}
mHandler.postDelayed(mRunnable, 1000);
Thanks in advance for any help! :D

FaceRecognition with javacv android

I'm following javacv Face Detection/Recognition code, there is confusion regarding face recognition.. What I'm doing is (Sorry if it sounds stupid but I'm stuck)
1) Detect Face crop it and save it to sdcard and place path in learn.txt file (Learning part)
2) Detect Face crop it and find it in existing faces whether it exists or not, but it always return nearest position even if the face doesn't exist in sample faces..
what I'm doing wrong?
// Method, I'm using to recognize face
public Integer recognizeFace(Bitmap face, Context context) {
Log.i(TAG, "===========================================");
Log.i(TAG, "recognizeFace (single face)");
float[] projectedTestFace;
float confidence = 0.0f;
int nearest = -1; // closest match -- -1 for nothing.
int iNearest;
if (trainPersonNumMat == null) {
return null;
}
Log.i(TAG, "NUMBER OF EIGENS: " + nEigens);
// project the test images onto the PCA subspace
projectedTestFace = new float[nEigens];
// Start timing recognition
long startTime = System.nanoTime();
testFaceImg = bmpToIpl(face);
// saveBmp(face, "blah");
// convert Bitmap it IplImage
//testFaceImg = IplImage.create(face.getWidth(), face.getHeight(),
// IPL_DEPTH_8U, 4);
//face.copyPixelsToBuffer(testFaceImg.getByteBuffer());
// project the test image onto the PCA subspace
cvEigenDecomposite(testFaceImg, // obj
nEigens, // nEigObjs
new PointerPointer(eigenVectArr), // eigInput (Pointer)
0, // ioFlags
null, // userData
pAvgTrainImg, // avg
projectedTestFace); // coeffs
// LOGGER.info("projectedTestFace\n" +
// floatArrayToString(projectedTestFace));
Log.i(TAG, "projectedTestFace\n" + floatArrayToString(projectedTestFace));
final FloatPointer pConfidence = new FloatPointer(confidence);
iNearest = findNearestNeighbor(projectedTestFace, new FloatPointer(pConfidence));
confidence = pConfidence.get();
// truth = personNumTruthMat.data_i().get(i);
nearest = trainPersonNumMat.data_i().get(iNearest); // result
// get endtime and calculate time recognition process takes
long endTime = System.nanoTime();
long duration = endTime - startTime;
double seconds = (double) duration / 1000000000.0;
Log.i(TAG, "recognition took: " + String.valueOf(seconds));
Log.i(TAG, "nearest = " + nearest + ". Confidence = " + confidence);
Toast.makeText(context, "Nearest: "+nearest+" Confidence: "+confidence, Toast.LENGTH_LONG).show();
//Save the IplImage so we can see what it looks like
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "/sdcard/saved_images/" + nearest + " " + String.valueOf(seconds) + " " + String.valueOf(confidence) + " " + n + ".jpg";
Log.i(TAG, "Saving image as: " + fname);
cvSaveImage(fname, testFaceImg);
return nearest;
} // end of recognizeFace
EDIT The confidence is always negative!
Thanks in advance

how to get end of file(EOF)

I have this code..
String you = buf.readLine();
Log.d("STRING", ikaw);
StringTokenizer st = new StringTokenizer(you);
double lat = Double.parseDouble(st.nextToken());
double lng = Double.parseDouble(st.nextToken());
int type = Integer.parseInt(st.nextToken());
String text = st.nextToken();
Log.d("File Reading stuff", "success = " + lat);
Log.d("File Reading stuff", "success = " + lng);
Log.d("File Reading stuff", "success = " + type);
Log.d("File Reading stuff", "success = " + text);
How am i suppose to test if it is already the end of file?
I don't know how many lines there are in my file and I need to print all of them.
I know i should place my code inside a while loop, but I have no idea how to get the end of file.
I assume the code you have listed is inside a loop, and I assume buf is an instance of BufferedReader. You just need to check for null after you call readLine(). It returns null when you've hit the end of the file.

Categories

Resources